我已经制作了一个MVC应用程序,当您访问/ App / export时,它会压缩特定文件夹中的所有文件,然后返回zip文件。代码看起来像:
public ActionResult Export() {
exporter = new Project.Exporter("/mypath/")
return File(exporter.filePath, "application/zip", exporter.fileName);
}
我想要做的是将文件返回给用户,然后将其删除。有没有办法设置超时删除文件?或者保留文件句柄,以便在请求完成之前不删除文件?
答案 0 :(得分:7)
抱歉,我现在没有代码......
但这里的想法是:避免创建临时文件!您可以使用MemoryStream
将压缩数据直接写入响应。
编辑该行上有些内容(它没有使用MemoryStream
,但想法是一样的,避免创建临时文件,这里使用DotNetZip库:
DotNetZip now can save directly to ASP.NET Response.OutputStream
答案 1 :(得分:0)
我知道这个线程太旧了,但是如果有人仍然面对这个问题,这是一个解决方案。
正常创建临时文件。
通过System.IO.File.ReadAllBytes()将文件读入内存中的字节数组。
从桌面删除文件。
通过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中有一些很好的代码。