Ho un file ashx con IHttpHandler. Quando trasmetto alcuni dati a questo IHttpHandler, faccio un po 'di lavoro, creo un file e poi voglio che quel file sia restituito all'utente in modo che possa salvare il file tramite il browser.Scrittura di file su HttpResponse, il browser non richiede di salvare
Con il file creato, questo è il modo tento di scrivere il file torna alla risposta:
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");
In un blocco finally più tardi, chiamerò:
response.End()
Quando ho chiama questo gestore, non succede nulla. La risposta 200 viene restituita, non vengono emessi errori, ma il browser non chiederà all'utente di salvare questo file.
Ecco cosa la risposta, come catturata da Fiddler, si presenta come:
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]
Questa risposta è corretto per me. Contiene il contenuto del file, tuttavia in nessuno dei principali browser, nessuna finestra di dialogo file richiede di salvare il file.
Cosa sto facendo di sbagliato qui?
Aggiornamento: In caso di aiuto, qui è dove sto usando JavaScript dalla mia applicazione web per chiamare questo HttpHandler.
$.ajax({
type: 'POST',
url: ashxUrl,
data: postData,
success: function (result) {
// Doin' stuff on success
},
error: function (error) {
// Doin' stuff on error.
}
});
Ho provato la stessa identica cosa. Ho creato una semplice pagina 'Download.ashx' con il codice sopra, e posta su di essa da un'altra pagina,' Default.aspx'. In tutti e tre i browser (IE, FF, Chrome), funziona perfettamente e sto ottenendo quasi gli stessi header di Fiddler. Non sai cos'altro potrebbe succedere? – mellamokb
Interessante! Forse sarebbe utile descrivere il mio JavaScript dove sto facendo esplicitamente questa richiesta di chiamata. Modificherò il post principale per includere questo snippet. EDIT: ho aggiunto lo snippet JS. –
Ah. Sì, questo aiuta. Non puoi fare un [scaricare file tramite AJAX] (http://stackoverflow.com/questions/4814877/how-to-download-file-via-ajax-with-http-post-ie-some-info-in -corpo). Avrai bisogno di una soluzione alternativa [come questa] (http://stackoverflow.com/questions/3499597/javascript-jquery-to-download-file-via-post-with-json-data). – mellamokb