【发布时间】:2011-01-29 11:19:44
【问题描述】:
我有以下代码用于将页面附件带给用户:
private void GetFile(string package, string filename)
{
var stream = new MemoryStream();
try
{
using (ZipFile zip = ZipFile.Read(package))
{
zip[filename].Extract(stream);
}
}
catch (System.Exception ex)
{
throw new Exception("Resources_FileNotFound", ex);
}
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/unknown";
if (filename.EndsWith(".docx"))
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
}
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
Response.BinaryWrite(stream.GetBuffer());
stream.Dispose();
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
问题是所有支持的文件都可以正常工作(jpg、gif、png、pdf、doc 等),但 .docx 文件在下载时已损坏,需要由 Office 修复才能打开。
一开始我不知道问题是不是在解压包含.docx的zip文件,所以我没有把输出文件只放在响应中,而是先保存,文件打开成功,所以我知道问题应该出现在响应写作中。
你知道会发生什么吗?
【问题讨论】:
-
这让我在输出 PDF 时绊倒了。事实证明,PDF 查看器会在有效数据结束后容忍意外垃圾,并且我正在将页面的渲染 HTML 添加到我发送的每个 PDF 文件中。其他二进制文件格式可能相同,它们不关心附加到有效数据的意外数据。
标签: asp.net httpresponse docx