IHttpHandlerを持つashxファイルがあります。私はこのIHttpHandlerにいくつかのデータをPOSTするとき、私はいくつかの仕事をし、ファイルを作成し、そのファイルをブラウザに戻すようにユーザーに返すようにします。作成したファイルを使用してファイルをHttpResponseに書き込むと、ブラウザは保存を要求しません。
が、これは私が戻って応答にファイルを書き込もうとする方法である。最終的には、後にブロック内
HttpResponse response = context.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment; filename=MYFILE.EXT");
response.WriteFile("C:\tempstuff\MYFILE.EXT");
、私が呼び出します。
response.End()
を
ときIこのHandlerを呼び出すと、何も起こりません。 Response 200が返され、エラーはスローされませんが、ブラウザはこのファイルを保存するようにユーザーに求めません。この応答は、私には正しいよう
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 23 Aug 2012 12:12:19 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=MYFILE.EXT
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 781053
Connection: Close
[raw content of the file here]
:ここ
はフィドラーによって取り込まれた応答は、次のようになります。それにはファイルの内容が含まれていますが、主要なブラウザーの下ではファイルを保存するダイアログボックスは表示されません。
私はここで間違っていますか?
更新:ここで私のWebアプリケーションからこのHttpHandlerを呼び出すJavaScriptを使用しています。
$.ajax({
type: 'POST',
url: ashxUrl,
data: postData,
success: function (result) {
// Doin' stuff on success
},
error: function (error) {
// Doin' stuff on error.
}
});
全く同じことを試しました。私は上のコードで単純なページ 'Download.ashx'を作って、別のページ' Default.aspx'からそれをPOSTしました。 3つのブラウザ(IE、FF、Chrome)では完全に動作し、Fiddlerではほぼ同じヘッダーを取得しています。他に何が起こっているのかはっきりしない?興味深い! – mellamokb
JavaScriptを明示的に指定しているところでJavaScriptを記述すると効果的かもしれません。メインの投稿を編集してこのスニペットを追加します。編集:JSスニペットを追加しました。 –
Ah。はい、助けになります。 [AJAX経由でファイルをダウンロードする]ことはできません(http://stackoverflow.com/questions/4814877/how-to-download-file-via-ajax-with-http-post-ie-some-info-in -体)。このような代替ソリューションが必要になります(http://stackoverflow.com/questions/3499597/javascript-jquery-to-download-file-via-post-with-json-data)。 – mellamokb