2

このaspxページにpdfを提供しようとしています。Firefox では正しく動作しますが、IE では

Internet Explorer は SERVER_NAME から getform.aspx をダウンロードできません
Internet Explorer はこのインターネット サイトを開くことができませんでした。要求されたサイトは利用できないか、見つかりません。

これは私のコードの一般的な機能です。これは複数の関数に分散しています (これが WriteFile を使用しない理由です - その場で pdf を生成することがあります) が、一般的には次のとおりです。

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();

Fiddler を見ると、ページはこれを使用してフェッチされています。

GET /getform.aspx?Failure=Y&r=someencryptedstring HTTP/1.1

次のようにブラウザに返されます。

HTTP/1.1 200 OK
日付: 2009 年 4 月 9 日 22:08:33 GMT
サーバー: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
プラグマ: no-cache
Content-処分:添付ファイル。filename=form.pdf
Cache-Control: no-cache, no-store
プラグマ: no-cache
Expires: -1
Content-Type: application/pdf
Content-Length: 628548

これは本当に私を悩ませています。私は SSL を使用していません。それ以外の場合は、この KB 記事が適用されるようです。誰にもアイデアはありますか?

4

1 に答える 1

1

ヘッダーで返される Content-Length は、送信しているファイルに対して実際に正しいですか? これを、ここで使用するいくつかの製品コードと比較しているだけで、Content-Length ヘッダーを明示的に設定しているように見えます。私の記憶が正しければ、一部のブラウザーでは、ヘッダーと実際のファイル サイズが一致しない場合に問題が発生します。

編集 質問の作成者は、Content-Disposition ヘッダーを application/pdf ではなく application/download に変更すると、問題が回避されるように思われることを発見しました。

于 2009-04-09T23:14:18.697 に答える