OpenXML 文件下载,无需临时文件

发布于 2024-11-02 01:25:45 字数 269 浏览 5 评论 0原文

有没有办法在 ASP.Net 页面中提供新生成的 OpenXML (docx) 文件的下载,而不将其保存在临时文件夹中?

MSDN 上我只找到了一个教程使用临时文件,但我考虑使用 WordprocessingDocument.MainDocumentPart.GetStream() 并直接将流写出。

Is there a way of providing a download in an ASP.Net Page for a freshly generated OpenXML (docx) file without saving it in a temporary folder?

On MSDN I only found a tutorial for using a temp file but I thought about using the WordprocessingDocument.MainDocumentPart.GetStream() and directly writing the stream out.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吝吻 2024-11-09 01:25:45

创建文档时,使用 MemoryStream 作为后备存储。然后正常创建和关闭文档,并将内存流的内容提供给客户端。

using(var stream = new MemoryStream())
{
    using(var doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true) 
    {
        ...
    }
    stream.Position = 0;
    stream.CopyTo(Response.OutputStream);
}

不要只获取 MainDocumentPart,因为顾名思义,这只是文档包的一部分,而不是全部。

您还需要为内容类型和配置设置响应标头。

When you create the document use a MemoryStream as the backing store. Then create and close the document normally and serve the contents of the memory stream to the client.

using(var stream = new MemoryStream())
{
    using(var doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true) 
    {
        ...
    }
    stream.Position = 0;
    stream.CopyTo(Response.OutputStream);
}

Do not just grab the MainDocumentPart because, as the name implies, this is just one part of the document package, not everything.

You'll also need to set response headers for content type and disposition.

无尽的现实 2024-11-09 01:25:45

.NET 4.0 中的 Stream.CopyTo()可能会在这里帮助你。

WordprocessingDocument.MainDocumentPart.GetStream().CopyTo(Response.OutputStream);

您仍然需要设置 MIME 类型、内容处置等标头。

Stream.CopyTo() in .NET 4.0 might help you out here.

WordprocessingDocument.MainDocumentPart.GetStream().CopyTo(Response.OutputStream);

You'll still need to set the headers for MIME type, content-disposition and so on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文