2010-07-02 45 views
6

Estoy intentando crear una página de servidor (C#, asp.net 2.0+) para guardar un archivo cargado desde otra página.Carga de archivos ASP.NET

Específicamente, Tengo una página HTML con una

<form action="upload.aspx"> 

y no puedo encontrar la manera de manejar guardar el archivo en el servidor en upload.aspx.

Encontré algunos ejemplos (uno es: http://msdn.microsoft.com/en-us/library/aa479405.aspx) pero eso requiere que el elemento <input type=file> esté en la misma página.

Tengo dificultades para tomar el archivo publicado en mi página upload.aspx.

¿Alguien tiene alguna indicación? ¿Cómo puedo tomar un archivo publicado en aspx y guardarlo en el servidor cuando el archivo se publica desde otra página?

Muchas gracias, Brett

Respuesta

10

1.Create Uploadfile.aspx

2.Embed la Uploadfile.aspx en su página HTML usando iframe

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Uploadfile.aspx.cs" Inherits="Uploadfile" %> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title>File Upload Control</title> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
     <div> 
     <asp:FileUpload runat="server" ID="fuSample" /> 
     <asp:Button runat="server" ID="btnUpload" Text="Upload" 
       onclick="btnUpload_Click" /> 
       <asp:Label runat="server" ID="lblMessage" Text=""></asp:Label> 
     </div> 
     </form> 
    </body> 
    </html> 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
public partial class Uploadfile : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     //Files is folder Name 
     fuSample.SaveAs(Server.MapPath("Files") + "//" + fuSample.FileName); 
     lblMessage.Text = "File Successfully Uploaded"; 
    } 
} 

continuación, insertar tu página aspx en HTML como sigue,

<iframe height="40" width="700" src="Uploadfile.aspx"> 
</iframe> 

ahora puede ser capaz de cargar tu archivo desde html, usando UploadFiles.aspx.

1

utilizar código similar a este y luego escribirlo en el disco (usando, por ejemplo, FileStream)

HttpFileCollection MyFileCollection; 
HttpPostedFile MyFile; 
int FileLen; 
System.IO.Stream MyStream; 

MyFileCollection = Request.Files; 
MyFile = MyFileCollection[0]; 

FileLen = MyFile.ContentLength; 
byte[] input = new byte[FileLen]; 

// Initialize the stream. 
MyStream = MyFile.InputStream; 

// Read the file into the byte array. 
MyStream.Read(input, 0, FileLen); 

http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.inputstream%28VS.71%29.aspx

1

Usted no puede hacerlo sin el <input type=file">

<form action="upload.aspx"> no envía un archivo indica al servidor dónde enviar el requ est a.

0

he cometido un pequeño caso de prueba:

  1. Uploader.aspx marcado:

    <form id="form1" runat="server"> 
    <div> 
        <asp:FileUpload runat="server" ID="fuTest" /><br /> 
        <asp:Button runat="server" ID="btnUpload" Text="Upload" PostBackUrl="~/Uploading/Upload.aspx" /> 
    </div> 
    </form> 
    
  2. Codebehind de Upload.aspx:

    protected void Page_Load(object sender, EventArgs e) 
    { 
        FileUpload fu = PreviousPage.FindControl("fuTest") as FileUpload; 
        if (fu != null) 
        { 
         int length = fu.PostedFile.ContentLength; 
        } 
    } 
    

La propiedad PostBackUrl del botón lo publica en Upload.aspx página. Allí puede usar la propiedad PreviousPage de la clase Page para encontrar el control de la página anterior, convertirlo a FileUpload y recuperar lo que quiere de él.