filestream.write
を使用してサーバーからクライアントにストリーミングデータをダウンロードしています。その場合、何が起こっているのですか?私はファイルをダウンロードすることができますが、それはブラウザにダウンロードとして表示されません。 [ダウンロード]セクションに[名前を付けて保存]のポップアップが表示されず、[ダウンロードバー]が表示されません。見て回ってみると、レスポンスヘッダーに「何か」を含めて、このレスポンスに添付ファイルがあることをブラウザに伝える必要があると思います。また、私はクッキーを設定したい。asp.net/mvcのコントローラー内のアクション内でHTTP応答にヘッダーを追加
[HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)]
public ActionResult Download(string name)
{
// some more code to get data in inputstream.
using (FileStream fs = System.IO.File.OpenWrite(TargetFile))
{
byte[] buffer = new byte[SegmentSize];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, SegmentSize)) > 0)
{
fs.WriteAsync(buffer, 0, bytesRead);
}
}
}
return RedirectToAction("Index");
}
私はというエラーを取得しています:これを実現するために、これは私がやっているものです「System.web.httpcontext.currentは財産であり、タイプとして使用されています」
適切な場所でヘッダーを更新していますか?これを行うための他の方法はありますか?
私はこれをやってみました。しかし、それでもブラウザの[ダウンロード]セクションには[名前を付けて保存]ダイアログボックスとダウンロードプログレスバーは表示されません。 – ezile
これは私のために働いて、私はビューのHTMLが私のテストケースにダウンロードされて参照してください。あなたのためには、あなたが行動へのリダイレクトである可能性があります。私はこのシナリオを試していない。このヘッダをIndexの下に置いて試してみてください。 – PSL
もう少し詳しく説明します。私は「インデックス」ページにいて、次にダウンロードをクリックしてJavaScriptを介してダウンロードアクションを呼び出します。上記のコードはダウンロードアクションで書かれています。ファイルをユーザーにストリーミングした後、私はIndexページにリダイレクトします。私はブラウザにダウンロードがあると言わなければならないときと同じように混乱しています。私は、FileStream.WriteSyncを使用してファイルを送信していることを意味するので、添付ファイルがあることをファイルに送信する前にブラウザに指示する必要があると思われますので、「名前を付けて保存」ダイアログボックスがポップアップ表示されます。私はここのワークフローでは混乱していると思うので、いつ、どこで変更するべきではありません。 – ezile