Загрузка файла OpenXML без временного файла - PullRequest
6 голосов
/ 19 апреля 2011

Есть ли способ обеспечить загрузку на странице ASP.Net свежесгенерированного файла OpenXML (docx) без сохранения его во временной папке?

Вкл. MSDN Только для Iнашел руководство по использованию временного файла, но я подумал об использовании WordprocessingDocument.MainDocumentPart.GetStream() и о прямой записи потока.

Ответы [ 2 ]

12 голосов
/ 19 апреля 2011

При создании документа используйте MemoryStream в качестве резервного хранилища.Затем создайте и закройте документ обычным способом и передайте содержимое потока памяти клиенту.

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

Не просто захватите MainDocumentPart, поскольку, как следует из названия, это только одна частьпакет документов, а не все.

Вам также понадобится установить заголовки ответа для типа контента и расположения.

1 голос
/ 19 апреля 2011

Stream.CopyTo () в .NET 4.0 может помочь вам здесь.

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

Вам все равно нужно будет установить заголовки для типа MIME, расположения содержимого и т. Д.

...