У меня есть файл ashx с IHttpHandler. Когда я отправляю некоторые данные этому IHttpHandler, я делаю некоторую работу, создаю файл, а затем хочу вернуть этот файл пользователю, чтобы он мог сохранить файл через браузер.Запись файла в 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()
Когда я вызовите этого обработчика, ничего не происходит. Ответ 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]
Этот ответ выглядит правильно для меня. Он содержит содержимое файла - однако в любом из основных браузеров диалог файла не предлагает мне сохранить файл.
Что я здесь делаю неправильно?
Обновление: В случае, если это помогает, здесь я использую JavaScript из своего веб-приложения для вызова этого HttpHandler.
$.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'. Во всех трех браузерах (IE, FF, Chrome) он отлично работает, и я получаю почти те же заголовки в Fiddler. Не знаете, что еще может произойти? – mellamokb
Интересно! Возможно, это поможет описать мой JavaScript, где я явно делаю этот запрос. Я отредактирую основную запись, чтобы включить этот фрагмент. EDIT: Я добавил фрагмент JS. –
Ах. Да, это помогает. Вы не можете выполнить [загрузку файла через 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