Mam plik ashx z IHttpHandler. Kiedy POST niektóre dane do tego IHttpHandler, wykonuję trochę pracy, tworzę plik, a następnie chcę, aby ten plik został zwrócony do użytkownika, aby mógł zapisać plik za pomocą przeglądarki.Zapisywanie pliku do HttpResponse, przeglądarka nie monituje o zapisanie
Z pliku utworzonego, to jak próbuję zapisać plik z powrotem do odpowiedzi:
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");
W bloku finally później, wezwę:
response.End()
Kiedy nazwij to Handler, nic się nie dzieje. Odpowiedź 200 jest zwracana, nie są zgłaszane żadne błędy - ale przeglądarka nie poprosi użytkownika o zapisanie tego pliku.
Oto co odpowiedź, jak schwytany przez Skrzypek, wygląda następująco:
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]
Ta odpowiedź wygląda poprawna do mnie. Zawiera zawartość pliku - jednak w żadnej z głównych przeglądarek żadne okno dialogowe pliku nie monituje mnie o zapisanie pliku.
Co ja tu robię źle?
Aktualizacja: Jeśli to pomaga, oto gdzie używam JavaScript z mojej aplikacji internetowej, aby połączyć się z tym HttpHandler.
$.ajax({
type: 'POST',
url: ashxUrl,
data: postData,
success: function (result) {
// Doin' stuff on success
},
error: function (error) {
// Doin' stuff on error.
}
});
Próbowałem dokładnie to samo. Zrobiłem prostą stronę 'Download.ashx' z powyższym kodem i POSTed do niej z innej strony,' Default.aspx'. We wszystkich trzech przeglądarkach (IE, FF, Chrome) działa idealnie, a ja dostaję prawie dokładnie te same nagłówki w Fiddler. Nie wiesz, co jeszcze może się dziać? – mellamokb
Interesujące! Być może pomogłoby to w opisaniu mojego JavaScriptu, w którym wyraźnie dokonuję tego wezwania. Będę edytować główny post, aby uwzględnić ten fragment. EDYCJA: dodałem fragment kodu JS. –
Ah. Tak, to pomaga. Nie można zrobić [pobieranie pliku za pośrednictwem AJAX] (http://stackoverflow.com/questions/4814877/how-to-download-file-via-ajax-with-http-post-ie-some-info-in -ciało). Będziesz potrzebować alternatywnego rozwiązania [takiego jak to] (http://stackoverflow.com/questions/3499597/javascript-jquery-to-download-file-via-post-with-json-data). – mellamokb