Asp.Net Versenden von PDF-browser
Ich habe versucht, diese aspx-Seite zu dienen eine pdf-Datei. Es funktioniert einwandfrei im Firefox, aber IE gibt
Internet Explorer kann nicht downloaden getform.aspx von SERVER_NAME
Internet Explorer konnte nicht geöffnet werden dieser Internet-Seite. Die angeforderte Seite ist entweder nicht verfügbar oder kann nicht gefunden werden.
Dies ist die Allgemeine Funktionalität meines Codes. Es verbreitet sich über mehrere Funktionen (das ist, warum wir nicht mit WriteFile - manchmal sind wir generieren der pdf-Datei on-the-fly), aber dies ist in der Regel:
FileStream fs = File.Open(Path.Combine(PdfBasePath, "form.pdf"), FileMode.Open, FileAccess.Read);
Stream output = Response.OutputStream;
byte[] buffer = new byte[BUFFER_SIZE];
int read_count = fs.Read(buffer, 0, BUFFER_SIZE);
while (read_count > 0)
{
output.Write(buffer, 0, read_count);
read_count = fs.Read(buffer, 0, BUFFER_SIZE);
}
fs.Close();
Response.Clear();
Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Pdf;
Response.AddHeader("Content-Disposition", "attachment; filename=form.pdf");
Response.Output.Flush();
Response.End();
Blick auf Fiedler, der die Seite heruntergeladen wird:
GET /getform.aspx?Fehler=Y&r=someencryptedstring HTTP/1.1
Es wird an den browser zurückgegeben so:
HTTP/1.1 200 OK
Datum: Thu, 09 Apr 2009 22:08:33 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Pragma: no-cache
Content-Disposition: attachment; filename=form.pdf
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/pdf
Content-Length: 628548
Dies ist wirklich nervt mich. Ich bin nicht mit SSL, sonst in diesem KB-Artikel würde scheinen, sich zu bewerben. Jemand irgendwelche Ideen?
Ja. Wir haben zwei Server, die für die Prüfung: mein lokal, und ein Produktions-scale-server. Ich habe getestet mit IE6, IE7, Firefox und Safari. Alle arbeiten nur dandy mit Ausnahme der IEs. Diejenigen, die nur ausflippen. Dies ist das gleiche von anderen Maschinen auch.
Lassen Sie mich hinzufügen, dass es egal ist, wenn die pdf-Datei zeigt im browser-Fenster, oder wenn der browser entscheidet sich, einfach laden Sie es auf die Benutzer HD. Entweder ist in Ordnung. Aber IE funktioniert auch nicht.
Für andere, die möglicherweise ausgeführt werden, in diesem gleichen problem, die SSL verwenden, siehe hier: stackoverflow.com/questions/1038707/...
InformationsquelleAutor Amy | 2009-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der Content-Length zurückgegeben wird, die in der header eigentlich richtig für die Datei, die Sie versenden? Ich bin nur der Vergleich von einigen Produktions-code, den wir hier verwenden, und es sieht aus wie wir explizit den Content-Length-header. Wenn ich mich Recht erinnere, einige Browser haben ein problem, wenn der header und der eigentlichen Datei Größe nicht übereinstimmen.
Bearbeiten
Die Frage, die der Autor gefunden, dass die änderung der Content-Disposition-header auf application/download application/pdf-Datei scheint das problem zu umgehen.
Ich nehme an, es ist nicht dasselbe für die Datei-basierte und generierte PDF-Dateien, richtig? Ist es möglich, bedingt Antwort benutzen.TransmitFile() für die Datei-basierte und sehen, ob das behebt alles?
Ich denke, es ist die URL. Zog ich den code für eine Seite, ohne einen verschlüsselten string in der URL, und es funktionierte ok. Es sieht aus wie der IE ignoriert die content-disposition-header und der name der Seite, einschließlich der query-string, wie der name der Datei.
Ihre Kommentare haben mich bewogen, in die richtige Richtung - IE ignoriert die content-disposition-tag. Eine google-Suche führte mich zu der Lösung - ändern des content-type-header "application/download" angezeigt wird, um das problem zu beheben. Ich bin die Kennzeichnung der Antwort als korrekt. Vielen Dank für den Schub.
Ja, die einzige andere Sache, die ich gefunden Unterschied zwischen deinem code und meinem code ist, dass sich innerhalb der Content-Disposition-header, haben wir nicht ein Leerzeichen zwischen "attachment;" und "filename=bla". IE könnte nur sein, barfing auf dem Platz. Wir verwenden application/pdf für pdf-Dateien wenn.
InformationsquelleAutor Ryan Bolger