2016-11-24 3 views
0

Ich erbte eine. NET-Anwendung, die Benutzer ein PDF herunterladen können. Jetzt kann ich die PDF-Datei herunterladen, wenn ich lokal arbeite, aber wenn ich auf dem IIS-Server bereitstellen, stoße ich auf Probleme. Der Download funktioniert in Firefox, funktioniert aber nicht in Chrome und manchmal auch in IE. Die Tatsache, dass ich es in meiner lokalen Entwicklungsumgebung herunterladen kann, sagt, dass es etwas mit der IIS-Konfiguration oder vielleicht mit meinem Code sein könnte. Das PDF wird in der Tabelle ms sql server 2012 als varbinary gespeichert. Ich habe unten einen Code zur Verfügung gestellt, mit dem die Daten gelesen werden. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Außerdem überprüfte ich die iis Protokolle und ich bekomme 200 Statuscodes für alles. Nichts fällt da drinnen auf.Fail Network Error Download PDF mit iis

if(Session["DetailID"] != null) 
{ 
    //get the file 
    DataTable dt = sp_Attachment_Download(lblAttachmentIDD.Text); 
    DataRow row = dt.Rows[0]; 

    string name = (string)row["AFileName"]; 
    string contentType = (string)row["AFileType"]; 
    Byte[] data = (Byte[])row["AFile"]; 

    /// Send the file to the browser 
    Response.AddHeader("Content-type", contentType); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + name); 
    Response.BinaryWrite(data); 
    Response.Flush(); 
    Response.Close(); 
} 

EDITED ---------- Ich verwende die Entwicklertools für Internet Explorer und Chrome und fand etwas Interessantes. Chrome gibt mir den folgenden Fehler, wenn ich auf den Link klicke:

IE gibt keinen Fehler, aber etwas hat meine Aufmerksamkeit erregt. Ich meine REQUEST Kopfzeile, ACCEPT enthält keine Anwendung/pdf und die RESPONSE Content-Type hat Anwendung/pdf. Könnte das etwas sein? Wie kann ich das ACCEPT so einstellen, dass es aspx-Seite application/pdf enthält?

+0

Ich stieß auch auf ein ähnliches Problem, schlägt der Download in Chrome mit der Nachricht Failed - Network Error fehl. Aber ich bemerkte, dass das Problem bei den Protokollen lag, Chrome verwendete HTTP/2, während Firefox HTTP/1.1 verwendete. Hast du das beobachtet? – KiKMak

Antwort

0

Ich hatte ein ähnliches Problem beim Herunterladen von PDF aus Chrom als in meinem Fall Dateiname hatte ein Komma und das Chrom anscheinend nicht so, also habe ich Komma aus dem Dateinamen entfernt und es hat funktioniert. PS: Bitte versuchen Sie nicht Response.Close() zu verwenden. Es bricht den Thread ab und löst eine Ausnahme aus.

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment; filename=" + fileName.Replace(",",,"); 
Response.CacheControl = "No-cache"; 
Response.Write(data); 
Response.Flush(); 
Response.SuppressContent = true; 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
+0

Es hat nicht funktioniert. hat immer noch den gleichen Fehler. danke tho. –

0

Vielleicht wird dies helfen, hier ist mein Code, um das Gleiche zu tun. Eine Sache, die ich bemerkte, ist, dass Sie nicht die Dateilänge angeben, die ich glaube, dass erforderlich ist. Bitte beachten Sie, dass pFileData eine Klasse ist, die FileName, eine Zeichenfolge und FileData, ein Byte [] enthält.

 System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response; 
     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + pFileData.FileName); 
     Response.AddHeader("Content-Length", pFileData.FileData.Length.ToString()); 
     Response.BufferOutput = false; 
     Response.BinaryWrite(pFileData.FileData); 
     Response.Flush(); 
     Response.SuppressContent = true; 
     HttpContext.Current.ApplicationInstance.CompleteRequest(); 
     Response.End();