2011-04-19 6 views
6

새로 생성 된 OpenXML (docx) 파일을 임시 폴더에 저장하지 않고 ASP.Net 페이지에서 다운로드 할 수 있습니까?임시 파일없이 OpenXML 파일 다운로드

MSDN 나는 임시 파일 사용에 대한 지침서 만 찾았지만 WordprocessingDocument.MainDocumentPart.GetStream()을 사용하고 스트림을 직접 작성하는 방법에 대해 생각했습니다.

+0

이것은이 질문과 중복되는 것처럼 보입니다. http://stackoverflow.com/questions/393647/response-content-type-as-csv 응답에 데이터를 직접 작성하여 동일한 솔루션을 사용할 수 있어야합니다. – kareem

답변

12

문서를 만들 때 MemoryStream을 보조 저장소로 사용하십시오. 그런 다음 문서를 만들고 닫은 다음 메모리 스트림의 내용을 클라이언트에 제공하십시오. 이름에서 알 수 있듯이,이 문서의 패키지가 아닌 모든 것의 한 부분이다, 때문에

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

그냥 MainDocumentPart을 잡아하지 마십시오.

또한 콘텐츠 유형 및 처리에 대한 응답 헤더를 설정해야합니다.

1

Stream.CopyTo() (.NET 4.0)은 여기에서 도움이 될 수 있습니다.

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

MIME 유형, 내용 처리 등에 대한 헤더를 설정해야합니다.