OK, ça fait longtemps que je m'en sors. J'ai un WebService qui envoie un fichier zip au navigateur. Cela marche; lorsque je teste le WebService et que j'appelle directement la méthode, le fichier zip est téléchargé correctement dans le navigateur. Le problème se pose lorsque j'utilise jQuery pour envoyer une requête AJAX au WebService - le fichier zip est téléchargé dans la réponse, mais il reste dans la réponse et ne se télécharge pas en tant que fichier.Envoi d'un fichier Zip au client via une réponse - un type incorrect est envoyé
Voici mon code:
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=pleasework.zip");
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory("c:\\inetpub\\mediaserver\\music\\mixes");
zip.AddFile("c:\\test.txt");
zip.AddFile("c:\\test2.txt");
zip.Save("c:\\filename.zip");
}
HttpContext.Current.Response.TransmitFile("c:\\iloveshrooms.zip");
return "done";
}
Maintenant, cela fonctionne depuis les téléchargements de fichiers lorsque j'utilise la fonction « Invoke » lors de la navigation directement au service.
Voici ma demande jQuery AJAX ...
function getFile() {
alert("sending POST request...");
$.ajax({
type: 'POST',
url: 'ZipService.asmx/GetZipFile HTTP 1.1',
contentType: "application/x-www-form-urlencoded",
data: '{ "path":"c:\\inetpub\\mediaserver\\music\\mixes" }',
dataType: '',
beforeSend: function(xhr) {xhr.setRequestHeader("Accept","application/zip");},
success: function() {alert(":-)");},
failure: function() {alert(":-(");}
});
}
J'ai ajouté le code dans « beforeSend » afin que les états de demande explicitement quel type de réponse, le navigateur devrait attendre. J'ai utilisé Firebug pour surveiller les en-têtes de requête/réponse et je ne vois rien de mal avec eux (sauf quand je regarde le contenu de la réponse, il est plein de données binaires ET c'est la même taille que le fichier J'envoie.
Je viens de télécharger tentais écran-dumps de la demande/têtes de réponse et le contenu du reponse mais je n'ai pas assez de points de réputation pour ce faire encore :-(
La réponse est la même taille du fichier Zip, donc je suppose qu'il est renvoyé au navigateur, mais le navigateur ne sait pas quoi faire avec lui ..
Testé dans IE, FF & Chrome et les résultats sont cohérents.
Si quelqu'un pouvait faire la lumière sur ce sujet, je l'apprécierais grandement!