.Net MVC返回文件然后将其删除

时间:2010-11-08 22:39:58

标签: c# .net asp.net-mvc delete-file

我已经制作了一个MVC应用程序,当您访问/ App / export时,它会压缩特定文件夹中的所有文件,然后返回zip文件。代码看起来像:

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

我想要做的是将文件返回给用户,然后将其删除。有没有办法设置超时删除文件?或者保留文件句柄,以便在请求完成之前不删除文件?

3 个答案:

答案 0 :(得分:7)

抱歉,我现在没有代码......

但这里的想法是:避免创建临时文件!您可以使用MemoryStream将压缩数据直接写入响应。

编辑该行上有些内容(它没有使用MemoryStream,但想法是一样的,避免创建临时文件,这里使用DotNetZip库:

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

答案 1 :(得分:0)

我知道这个线程太旧了,但是如果有人仍然面对这个问题,这是一个解决方案。

  1. 正常创建临时文件。

  2. 通过System.IO.File.ReadAllBytes()将文件读入内存中的字节数组。

  3. 从桌面删除文件。

  4. 通过File(byte [],“ application / zip”,“ SomeNAme.zip”)返回文件字节,这是从您的控制器获取的。 代码示例在这里:

         //Load ZipFile
         var toDownload = System.IO.File.ReadAllBytes(zipFile);
         //Clean Files
         Directory.Delete(tmpFolder, true);
         System.IO.File.Delete(zipFile);
    
         //Return result for download
         return File(toDownload,"application/zip",$"Certificates_{rs}.zip");
    

答案 2 :(得分:-1)

您可以创建类似于FileStream的Stream实现,但在处理文件时会删除该文件。

this SO post中有一些很好的代码。