当前位置: 首页 > 面试题库 >

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

湛鸿雪
2023-03-14
问题内容

我有以下代码将页面附件带给用户:

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()。



 类似资料:
  • 我有一个wordpress页面,在JS中有一些自定义功能,人们可以用pdf格式保存。是否有一种方法可以让人们也下载docx(MS Word)中的页面?我试着寻找解决办法,但找不到太多。 我想有一个按钮‘下载为docx',生成一个类似的pdf格式的外观版本。

  • 我有一个用SLIM框架编写的PHP REST API,我有一个API调用,它创建一个docx文件并强制下载该文件。 有人有主意吗?

  • 问题内容: 我正在使用角度$ http从服务器下载文件。文件类型可以不同。我应该设置请求标头以进行身份​​验证。下载完成后,文件已损坏!这是我在客户端保存文件的代码: 问题答案: 我最终通过将以下配置添加到ajax请求中解决了该问题: 并将Blob类型更改为 “应用程序/八位字节流”

  • 如下图,使用了vue3和vue-office/docx插件预览docx文件,为什么只有一页内容的文件预览页码会显示2呢?

  • 我试图通过调用Spring RESTendpoint在Reactjs中下载Excel文件,但我遇到了损坏文件的问题。 回应呼叫... Spring控制器…… 服务 当我执行上面的代码,我得到一个Excel文件o. k……但看response.data看起来像…… 嘎嘎��由于数据不可读,无法打开文件。打开服务器上创建的文件是可以的 欢迎任何想法 干杯

  • 问题内容: 使用JAVA,我试图强制浏览器下载文件。 这是我当前使用的代码: 它 几乎可以 正常工作,但是当强制下载文档(MS Office 2007+)时,下载的文件已损坏(至少,这是MS Office告诉我的)。如果尝试在存储它们的服务器上直接打开它,则不会出现该错误,这意味着下载时(而不是上传时)确实会干扰该问题。 根据IANA的说法,此类文件的MIME类型应为 (1) ,但是指定MIME类