2014-12-02 30 views
1

我有ServiceStack服务,并且服务生成.zip文件然后经由返回它:返回生成的文件,然后将其删除掉服务器

result = new HttpResult(new FileInfo(zipFileName), asAttachment: false);

其次(稍后)

Directory.Delete(dir); // Containing the zipfile

return result

我的问题是,我现在想得乐生成的文件,但我不能,因为它仍然很忙。 具有无效的访问冲突。

处理这个问题的最佳方法是什么?有没有办法将整个内容写入响应流,以释放目录?

回答

4

有很多不同的方法可以返回二进制响应,可以在ImageService中看到:您可以:

  • 从您的服务回报byte[]StreamIStreamWriter其中获得直接写入响应
  • 包装byte[],在HttpResultStream反应,也可直接自定义HTTP响应头
  • 写的在服务base.Response
  • 返回自定义自定义结果

下面是实现IStreamWriter这在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; } 
} 
相关问题