2011-04-19 4 views
6

Existe-t-il un moyen de fournir un téléchargement dans une page ASP.Net pour un fichier OpenXML (docx) fraîchement généré sans l'enregistrer dans un dossier temporaire?Téléchargement de fichier OpenXML sans fichier temporaire

Sur MSDN J'ai seulement trouvé un tutoriel pour l'utilisation d'un fichier temporaire, mais j'ai pensé à utiliser le WordprocessingDocument.MainDocumentPart.GetStream() et écrire directement le flux.

+0

Cela ressemble à un doublon de cette question. http://stackoverflow.com/questions/393647/response-content-type-as-csv Vous devriez pouvoir utiliser la même solution en écrivant vos données directement dans la réponse. – kareem

Répondre

12

Lorsque vous créez le document, utilisez un MemoryStream comme magasin de stockage. Puis créez et fermez le document normalement et servez le contenu du flux de mémoire au client.

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

Ne vous contentez pas saisir les MainDocumentPart parce que, comme son nom l'indique, c'est juste une partie du paquet de documents, pas tout.

Vous devrez également définir des en-têtes de réponse pour le type de contenu et la disposition.

1

Stream.CopyTo() dans .NET 4.0 pourrait vous aider ici.

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

Vous devrez toujours définir les en-têtes pour le type MIME, la disposition de contenu, etc.

Questions connexes