加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

为什么从ASP.NET页面下载时,.docx文件被损坏?

发布时间:2020-12-15 18:47:21 所属栏目:asp.Net 来源:网络整理
导读:我有以下代码将页面附件带到用户: 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) { th
我有以下代码将页面附件带到用户:
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之后。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读