2010-07-02 3 views
6

Sto tentando di creare una pagina server (C#, asp.net 2.0+) per salvare un file caricato da un'altra pagina.Caricamento file ASP.NET

In particolare, Ho una pagina HTML con un

<form action="upload.aspx"> 

e io non riesco a capire come gestire il salvataggio del file sul server in Upload.aspx.

Ho trovato alcuni esempi (uno è: http://msdn.microsoft.com/en-us/library/aa479405.aspx) ma che richiede che l'elemento <input type=file> sia sulla stessa pagina.

Sono in difficoltà con l'acquisizione del file pubblicato nella mia pagina upload.aspx.

Qualcuno ha qualche indicazione? Come posso prendere un file pubblicato in aspx e salvarlo sul server quando il file viene pubblicato da un'altra pagina?

Molte grazie, Brett

risposta

10

1.Creare Uploadfile.aspx

2.Embed l'Uploadfile.aspx nella pagina HTML tramite 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"; 
    } 
} 

poi incorporare la pagina aspx in HTML come segue,

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

ora puoi essere in grado di caricare il file da html stesso, utilizzando UploadFiles.aspx.

1

Usa codice simile a questo e poi scrivere su disco (utilizzando, per esempio, 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

Non si può farlo senza <input type=file">

<form action="upload.aspx"> non invia un file indica al server dove inviare il requ est a

0

ho fatto un piccolo banco di prova:

  1. Uploader.aspx markup:

    <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 da 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 proprietà PostBackUrl del pulsante lo invia al Upload.aspx pagina. È possibile utilizzare la proprietà PreviousPage della classe Page per trovare il controllo dalla pagina precedente, eseguirne il cast in FileUpload e recuperare ciò che si desidera da esso.