2011-04-19 39 views
6

Có cách nào để cung cấp tải xuống trong Trang ASP.Net cho tệp OpenXML (docx) mới được tạo mà không lưu tệp đó vào một thư mục tạm thời không?Tải xuống tệp OpenXML mà không cần tệp tạm thời

Trên MSDN Tôi chỉ tìm thấy hướng dẫn để sử dụng tệp tạm thời nhưng tôi đã nghĩ đến việc sử dụng WordprocessingDocument.MainDocumentPart.GetStream() và trực tiếp viết luồng.

+0

Điều này có vẻ giống như một bản sao của câu hỏi này. http://stackoverflow.com/questions/393647/response-content-type-as-csv Bạn sẽ có thể sử dụng cùng một giải pháp bằng cách ghi dữ liệu trực tiếp vào phản hồi. – kareem

Trả lời

12

Khi bạn tạo tài liệu, hãy sử dụng MemoryStream làm cửa hàng sao lưu. Sau đó tạo và đóng tài liệu một cách bình thường và phục vụ nội dung của luồng bộ nhớ cho máy khách.

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

Không chỉ lấy MainDocumentPart vì, như tên của nó, đây chỉ là một phần của gói tài liệu chứ không phải mọi thứ.

Bạn cũng sẽ cần đặt tiêu đề phản hồi cho loại nội dung và bố cục.

1

Stream.CopyTo() trong .NET 4.0 có thể giúp bạn ở đây.

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

Bạn vẫn sẽ cần phải đặt tiêu đề cho loại MIME, bố cục nội dung, v.v.

Các vấn đề liên quan