2012-03-26 26 views
2

Ich muss auf meiner Website eine Option angeben, um mehrere Dateien hochzuladen und den Benutzern dann zu erlauben, diese Dateien herunterzuladen. Ich habe mehrere Dateien Teil hochladen, aber ich bin nicht sehr klar, wie ich Teil herunterladen werde. Ich dachte zuerst, Hyperlinks dynamisch zu einer Bezeichnung für jede Datei hinzuzufügen (da ich nicht sicher bin, wie viele Dateien der Benutzer hochladen wird). Aber dann öffnet es Datei im Browser und bietet keine Option zum Speichern oder Öffnen der Datei. Das Hauptproblem ist, dass der Benutzer jede Art von Datei wie ms doc oder xls oder Textdateien usw. senden kann. Daher ist der Inhaltstyp nicht festgelegt.Code zum Herunterladen der Datei

Ich bin nicht klar, wie genau ich es tun werde ich meine Link-Schaltflächen dynamisch hinzufügen oder Hyperlinks dynamisch hinzufügen. Und danach, wie werde ich die Datei herunterladen? Ich bin nicht in der Lage zu tun

Response.WriteFile(Server.MapPath(@"~/logo_large.gif")); 

als Inhaltstyp ist nicht klar. Bitte helfen Sie mir zum Download über Code alle Arten von Dateien

+0

Sie müssen den Inhaltstyp und die Dateilänge beim Hochladen der Datei speichern. Dies wird das Herunterladen erheblich vereinfachen. – WraithNath

+0

mögliches Duplikat von [Bereitstellung des dynamischen Dateidownloads in ASP.NET2.0] (http: // stackoverflow.com/questions/468893/providering-dynamic-file-download-in-asp-net2-0) –

Antwort

6

zum Herunterladen der Datei:

public void DownLoad(string FName) 
    { 
     string path = FName; 
     System.IO.FileInfo file = new System.IO.FileInfo(path); 
     if (file.Exists) 
     { 
      Response.Clear(); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
      Response.AddHeader("Content-Length", file.Length.ToString()); 
      Response.ContentType = "application/octet-stream"; 
      Response.WriteFile(file.FullName); 
      Response.End(); 

     } 
     else 
     { 
      Response.Write("This file does not exist."); 
     } 

    } 

aber dies ist für Wort doc/docx Dateien. In der Zeile: Response.ContentType = "application/octet-stream"; müssen Sie den Typ der Datei definieren.

für Hyperlink Anzeigen dynamisch eine Schleife schreiben und gehen über alle Dateien, die vom Benutzer hochgeladen wurden und writh den folgenden Code:

 yourdivId += "<a href='" + file.FullName + "' >" + file.Name + "</a></br>"; 
+0

Genau das ist mein Problem..Inhaltstyp ist nicht behoben..Und ich verwendete Hyperlink-Option, aber es öffnet immer Datei im Browser – user1181942

+0

Warum können Sie die Klausel switch nicht verwenden, um den Inhaltstyp entsprechend der Erweiterung der Datei zu definieren? und für den Hyperlink können Sie Ihren Code veröffentlichen? –

+0

Vielen Dank..das funktioniert für mich..Wie ich es mit nur einer Datei probiert habe. Was ich mache, ist Link-Schaltflächen für alle hochgeladenen Dateien dynamisch hinzuzufügen. Und auf Click Event-Datei wird heruntergeladen. Wie werde ich erfahren, welche Datei heruntergeladen werden soll? Ich meine Wie kann ich diese Argumente an Ereignisse weitergeben? – user1181942

0

Sie es wie folgt tun:

try 
     { 
      string strURL=txtFileName.Text; 
      WebClient req=new WebClient(); 
      HttpResponse response = HttpContext.Current.Response; 
      response.Clear(); 
      response.ClearContent(); 
      response.ClearHeaders(); 
      response.Buffer= true; 
      response.AddHeader("Content-Disposition","attachment;filename=\"" + Server.MapPath(strURL) + "\""); 
      byte[] data=req.DownloadData(Server.MapPath(strURL)); 
      response.BinaryWrite(data); 
      response.End(); 
     } 
     catch(Exception ex) 
     { 
    } 
1

Hope this u helfen.()

Response.Clear(); 
Response.ContentType = YourFile.ToString(); 
Response.AddHeader("Content-Disposition", "attachment;filename=" + YourFileName); 
Response.OutputStream.Write(YourFile, 0, YourFile.Length); 
Response.Flush(); 
Response.End(); 

I have tried this to download img,txtfile,zip file,doc it works fine.. 
but little problem user will face that in my case when i opened a word(doc) file its ask 
me to openwith..? when i select MsWord it opened it correctly. 

Für zeigt diese Datei, die Sie eine Rasteransicht machen können alle Datei mit einem Download-Link zu zeigen ...

1

Eigentlich kann man folgen verschiedene Wege.

  1. die Benutzer beim Upload Guide und er den Dateityp vor dem Start Upload machen angeben. Der Benutzer muss also den Inhaltstyp aus einer Auswahl auswählen. Sie müssen die Korrelation zwischen der Datei und ihrem Inhaltstyp speichern.

  2. Erstellen Sie eine Zuordnung zwischen Dateierweiterungen und MIME-Typen (See here for example). Sie müssen die Dateierweiterung abrufen und die Korrelation zwischen dieser Datei und ihrem Inhaltstyp speichern.

  3. Versuchen Sie, den Inhaltstyp automatisch zu identifizieren. Es gibt eine Windows API, mit der Sie den MIME-Typ einer Datei identifizieren können. Und here is some code.

Danach können Sie st mnmn Lösung verwenden.

Verwandte Themen