2010-07-02 6 views
6

J'essaie de créer une page de serveur (C#, asp.net 2.0+) pour enregistrer un fichier téléchargé à partir d'une autre page.Téléchargement de fichier ASP.NET

Plus précisément, je une page HTML avec un

<form action="upload.aspx"> 

et je ne peux pas comprendre comment gérer l'enregistrement du fichier sur le serveur Upload.aspx.

J'ai trouvé quelques exemples (l'un étant: http://msdn.microsoft.com/en-us/library/aa479405.aspx) mais cela nécessite que l'élément <input type=file> soit sur la même page.

J'ai des difficultés à saisir le fichier affiché sur ma page upload.aspx.

N'importe qui a des pointeurs? Comment puis-je récupérer un fichier publié dans aspx et l'enregistrer sur le serveur lorsque le fichier est posté à partir d'une autre page?

Un grand merci, Brett

Répondre

10

1.Créez Uploadfile.aspx

2.Embed la Uploadfile.aspx dans votre page HTML en utilisant 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"; 
    } 
} 

puis intégrer votre page ASPX en Html comme suivre,

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

maintenant vous pouvez être capable de télécharger votre fichier à partir de html lui-même, en utilisant UploadFiles.aspx.

1

code d'utilisation similaire à cela et puis l'écrire sur le disque (en utilisant, par exemple, 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

Vous ne pouvez pas le faire sans le <input type=file">

<form action="upload.aspx"> ne pas envoyer un fichier indique au serveur où envoyer le requ est à.

0

J'ai fait un test simple:

  1. balisage Uploader.aspx:

    <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 propriété PostBackUrl du bouton le poste sur Upload.aspx page. Là, vous pouvez utiliser la propriété PreviousPage de la classe Page pour trouver le contrôle de la page précédente, le convertir en FileUpload et récupérer ce que vous voulez.

Questions connexes