我有以下代码将页面附件带到用户:
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文件,所以不要把输出文件放在响应中,我先保存它,文件打开成功,所以我知道问题应该在回应写作。
你知道发生了什么吗?
解决方法
我也遇到这个问题,实际上找到了答案:
http://www.aspmessageboard.com/showthread.php?t=230778
事实证明,docx格式需要Response.End()在Response.BinaryWrite之后。