2017-10-18 21 views
0

Je suis en train de télécharger des fichiers .zip à partir de mon application .net C#. Ne pas avoir de succès. Mon code est ci-dessous. Le chemin et le nom du fichier sont complètement valides, rien ne semble télécharger. Notez comment j'ai à la fois "application/x-zip-compressed" et "application/zip" comme type de contenu (un commenté, essayé les deux). Aucun des deux ne fonctionne. Aucune indication d'erreur, rien à télécharger.télécharger des fichiers .zip dans C# .net

Ce qui est dingue c'est que ce code fonctionnait il y a seulement quelques semaines, avec le message surgissant, l'option "enregistrer sous" étant donnée, mais ça n'arrive pas maintenant pour une raison quelconque.

Quelqu'un voit quelque chose de mal, ou mon problème se trouve-t-il ailleurs en dehors du code ??

FileInfo file = new FileInfo(filepath); 

Response.Clear(); 

Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 

Response.AddHeader("Content-Length", file.Length.ToString()); 

//Response.ContentType = "application/x-zip-compressed"; 
Response.ContentType = "application/zip"; 
Response.WriteFile(file.FullName); 
+0

Alors ... quel est le problème? Que vois-tu? Des erreurs? Est-ce suspendu? – JuanR

Répondre

0

Je devine que vous obtenez un FileNotFoundException à Response.AddHeader("Content-Length", file.Length.ToString());.

Pour résoudre ce problème, vous devez utiliser Server.MapPath(...) qui ajoute le répertoire racine de votre application au filename. En outre, vous devez Flush() et End() votre Response correctement à force the client pour le recevoir.

string filename = "myfile.zip"; 
string serverpath = Server.MapPath($"~/{filename}"); 
FileInfo file = new FileInfo(serverpath); 
Response.Clear(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "application/zip"; 
Response.WriteFile(file.FullName); 
Response.Flush(); 
Response.End();