我有一个ServiceStack服务,该服务生成一个.zip文件,然后通过以下方式返回:
result = new HttpResult(new FileInfo(zipFileName), asAttachment: false);
接着(稍后)
Directory.Delete(dir); // Containing the zipfile
return result
我遇到的问题是我现在要删除生成的文件,但我不能,因为它仍然很忙。 违反访问权限无效。
处理此问题的最佳方法是什么?有没有办法将整个内容写入响应流,这将释放目录?
答案 0 :(得分:4)
有许多不同的方法可以返回二进制响应,可以在ImageService中看到:例如你可以:
byte[]
,Stream
,IStreamWriter
,直接写入回复byte[]
中包含Stream
,HttpResult
个响应,以自定义HTTP响应标头base.Response
这是一个实现IStreamWriter
的自定义Result示例,它将文件写入响应流并删除Dispose()
方法中包含文件的父目录:
public class ZipFileResult : IDisposable, IStreamWriter, IHasOptions
{
private readonly FileInfo fileInfo;
public ZipFileResult(FileInfo zipInfo, string contentType="application/zip")
{
fileInfo = zipInfo;
Options = new Dictionary<string, string> {
{ HttpHeaders.ContentType, contentType }
};
}
public void WriteTo(Stream responseStream)
{
using (var fs = fileInfo.OpenRead())
{
fs.WriteTo(responseStream);
return;
}
}
public void Dispose()
{
Directory.Delete(fileInfo.DirectoryName);
}
public IDictionary<string, string> Options { get; set; }
}