2011-04-19 19 views
6

¿Hay alguna manera de proporcionar una descarga en una página ASP.Net para un archivo OpenXML (docx) recién generado sin guardarlo en una carpeta temporal?Descarga de archivo OpenXML sin archivo temporal

En MSDN Solo encontré un tutorial para usar un archivo temporal, pero pensé en usar el WordprocessingDocument.MainDocumentPart.GetStream() y escribir directamente el flujo.

+0

Esto parece un duplicado de esta pregunta. http://stackoverflow.com/questions/393647/response-content-type-as-csv Debería poder utilizar la misma solución al escribir sus datos directamente en la respuesta. – kareem

Respuesta

12

Cuando crea el documento, utilice MemoryStream como almacén de respaldo. Luego cree y cierre el documento normalmente y sirva los contenidos del flujo de memoria al cliente.

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

No se limite a agarrar el MainDocumentPart porque, como su nombre lo indica, esto es sólo una parte del paquete de documentos, no todo.

También deberá configurar encabezados de respuesta para el tipo de contenido y la disposición.

1

Stream.CopyTo() en .NET 4.0 podría ayudarlo aquí.

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

Aún necesitará configurar los encabezados para tipo MIME, disposición de contenido, etc.

Cuestiones relacionadas