0

ユーザーが添付ファイルをアップロードし、asp:linkbutton を介して別の画面からダウンロードできる小さな asp.net アプリケーションがあります。IE10 で、リンクボタンをクリックしてアップロードしたファイルをダウンロードすると、IR は開く、保存する、キャンセルするダイアログを表示しますが、ファイル名の代わりに URL を表示します。Safari と Firefox では、これは起こりません。それは私を夢中にさせています。私はあらゆる種類のヘッダー/コンテンツ タイプ、コンテンツ配置の組み合わせを試しましたが、うまくいきませんでした。以下は、Firefox と Safari で動作する私のコードのスニペットです。バイナリを応答に書き込むだけです。

Dim bytes() As Byte = CType(dt.Rows(0)("UploadedFiles"), Byte())
Response.Clear()
Response.ClearHeaders()
Response.ClearContent()
Response.AddHeader("Content-Disposition", "attachment;filename=" & Chr(34) & 
dt.Rows(0)    ("FileName").ToString & Chr(34))
Response.Buffer = True
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = dt.Rows(0)("ContentType").ToString()
Response.BinaryWrite(bytes)
Response.Flush()
Response.Close()
Response.End()
4

1 に答える 1

0

これは私が行う方法です。IE8で動作します。申し訳ありませんが、IE10をインストールしてテストしていません。

// myFile = an object containing information about the file being served
Response.Clear()
Response.Cache.SetExpires(DateTime.Now.AddMonths(1))
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.ContentType = myFile.contentType
Response.AddHeader("Content-Disposition",  "attachment; filename=" & myFile.targetFilename)
Response.BinaryWrite(bytes) // your code
//Response.WriteFile(myFile.sourceFilename, True) // my code
Response.End()

キャッシングはおそらく必要ありません。

Response.WriteFileデータベース/バイト配列ではなくファイルシステムにファイルを保存したため、使用します。への電話に立ち寄ることができる場合がありますBinaryWrite

その他の唯一の違いは、Content-Disposition ヘッダーのファイル名を二重引用符で囲んでいることです。rfc2616がそれらを表示することは知っていますが、私のコードはそれらがなくても機能します。

于 2013-08-08T18:34:12.943 に答える