我有以下代码将页面附件带给用户:
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.BinaryWrite之后紧跟有Response.End()。