Téléchargement du fichier zip à travers ASP.NET MVC à l'aide de DotNetZip
J'ai créé un fichier texte dans un dossier et zippées ce dossier et enregistré @même emplacement à des fins de test. J'ai voulu télécharger ce fichier zip directement sur l'ordinateur de l'utilisateur après qu'il est créé. Je suis à l'aide de dotnetzip de la bibliothèque et de l'avoir fait suivant:
Response.Clear();
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "filename=" + "sample.zip");
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(Server.MapPath("~/Directories/hello"));
zip.Save(Server.MapPath("~/Directories/hello/sample.zip"));
}
Quelqu'un peut s'il vous plaît suggérer comment le fichier zip peut être téléchargé à l'utilisateur final.?
double possible de ASP MVC Télécharger des Fichiers Zip
OriginalL'auteur user2801336 | 2015-04-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le contrôleur de
File
méthode pour renvoyer un fichier, comme:Si le fichier zip n'est pas nécessaire sinon d'être stockée, il est inutile d'écrire dans un fichier sur le serveur:
Quelqu'un peut-il identifier où cette classe ZipFile vient d'où? Le seul que j'ai est un statique seul fichier, dans le Système.IO.La Compression.Système de fichiers.
avez-vous regardé les étiquettes?? Il s'agit de
DotNETzip
.Si votre zipfile revient vide, essayez de mettre de sortie.Position = 0 pour réinitialiser la position du flux, sinon il sera lu à partir de la fin du flux de données et vous obtiendrez vide zip. Crédits: René Wolferink
J'ai dû ajouter
.ToArray()
lors de la sortie du fichier, sinon, je voudrais obtenir un vide zip.OriginalL'auteur mcserep
Tout d'abord, envisager de façon à ne pas créer de fichiers sur le disque du serveur. Mauvaise pratique. Je vous recommande la création d'un fichier et compression dans la mémoire. J'espère que vous trouverez mon exemple ci-dessous utiles.
Notes pour le code ci-dessus:
MemoryStream
exemple des contrôles qu'il est ouvert, valide et etc. J'ai omis. J'ai plutôt passé un tableau d'octets du contenu d'un fichier au lieu d'unMemoryStream
exemple pour rendre le code plus robuste, mais ce serait trop pour cet exemple.Vous pouvez, mais de reprendre le téléchargement va déclencher toutes les actions dans la méthode de Téléchargement (création de flux, la compression de fichier, etc.). Voir plus d'informations ici - superuser.com/a/641957. Bien sûr, la tenue d'un fichier mis en cache pour le téléchargement serait de réduire les frais généraux pour le serveur, mais vous aurez à gérer l'accès simultané de plusieurs utilisateurs à la même ressource/page et probablement, ici, vous rencontrerez des problèmes.
OriginalL'auteur Alex Klaus
juste un correctif à Klaus solution: (comme je ne peux pas ajouter de commentaire que j'ai à ajouter une autre réponse!)
La solution est génial mais pour moi, il a donné corrompu le fichier zip et j'ai compris que c'est parce que de retour avant de finaliser zip objet de sorte qu'il n'a pas fermer le zip et le résultat dans un zip corrompu.
pour fixer nous avons juste besoin de déplacer la ligne de retour après à l'aide de zip bloc de sorte qu'il fonctionne.
le résultat final est :
OriginalL'auteur HamedH
Pour ceux qui veulent simplement le retour d'un fichier Zip à partir du dossier App_Data (juste dump dans vos fichiers zip), dans la Maison de contrôleur de créer cette méthode d'action:
Obtenir le Fichier est une extension de la méthode:
Maison de contrôleur de la vue Index ressemble à ceci:
L'indice principal fichier de la méthode d'action:
Où GetFileInformation est une méthode d'extension:
OriginalL'auteur John Peters
Créer un
GET
seule action du contrôleur qui renvoie unFileResult
, comme ceci:OriginalL'auteur Karl Anderson