2010-11-08 30 views
2

J'ai produit une application MVC qui, lorsque vous accédez/App/exporter, zippe tous les fichiers dans un dossier particulier, puis retourne le fichier zip. Le code ressemble à:.Net MVC Renvoyer le fichier, puis le supprimer

public ActionResult Export() { 
    exporter = new Project.Exporter("/mypath/") 
    return File(exporter.filePath, "application/zip", exporter.fileName); 
} 

Ce que je voudrais faire est de renvoyer le dossier à l'utilisateur, puis supprimez-le. Est-il possible de définir un délai d'expiration pour supprimer le fichier? ou maintenez sur la poignée de fichier afin que le fichier ne soit pas supprimé jusqu'à ce que la demande soit terminée?

Répondre

7

Désolé, je n'ai pas le code en ce moment ...

Mais l'idée est ici: juste éviter la création d'un fichier temporaire! Vous pouvez écrire les données compressées directement dans la réponse, en utilisant un MemoryStream pour cela.

EDIT Quelque chose sur cette ligne (il ne l'utilise MemoryStream mais l'idée est la même, ce qui évite la création d'un fichier temporaire, ici en utilisant la bibliothèque DotNetZip):

DotNetZip now can save directly to ASP.NET Response.OutputStream.

+0

données que je retourne est si énorme qu'il ne peut pas être en mémoire afin de créer un fichier temporaire – PUG

+0

@jaminator: Alors faites-le. Mais dans ce cas, je créerais un travail externe pour supprimer les anciens fichiers temporaires. – rsenna

-1

Vous pouvez créer une implémentation Stream similaire à FileStream, mais qui supprime le fichier lorsqu'il est éliminé.

Il y a du bon code dans this SO post.