【问题标题】:Trouble cleaning up after serving generated file from asp.net Page_Load从 asp.net Page_Load 提供生成的文件后无法清理
【发布时间】:2014-03-27 14:20:23
【问题描述】:

我想通过 http 请求参数从 asp.net 网页提供动态创建的二进制文件,如下所示:www.host.com/?Download=file。到目前为止我有

protected void Page_Load(object sender, EventArgs e)
{
  if (Request.Params.Allkeys.Contains("Download"))
  {
    String fileStr = Request.Params.GetValues("Download")[0];

    using (Stream generatedFile = File.Create(@"C:\Temp\file"))
    {
      /* write the contents of the file */
    }

    Response.ContentType = "application";
    Response.AddHeader("Content-Disposition",
                       "attachment; filename=" + fileStr);
    Response.WriteFile(@"C:\Temp\file");
    Response.End();
  }
}

这可行,但 C:\Temp\file 仍然存在,我想清理它。在Response.End() 之后调用File.Delete(@"C:\Temp\file"); 不起作用,因为Response.End() 会杀死线程。将 Response 方法放在 using 块中,使用 File.Create( (...), FileOptions.DeleteOnClose) 不起作用,因为 Response 方法无法访问文件。

有什么建议吗?

【问题讨论】:

    标签: c# asp.net filelock


    【解决方案1】:

    将文件写入响应后,您可以调用Response.Flush 以确保它已完全写入,然后在调用Response.End 之前将其删除:

    Response.WriteFile(@"C:\Temp\file");
    Response.Flush();
    File.Delete(@"C:\Temp\file");
    Response.End();
    

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 2010-10-01
      • 2015-02-26
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多