2010-09-13 37 views
18

Tôi đang sử dụng DotNetZip để tạo một tệp zip và chuyển nó vào một FileResult. Mở gỡ lỗi, tôi có thể xác minh rằng các MemoryStream chứa một tập tin, nhưng khi tôi chạy nó thông qua FileStreamResult, nó sẽ trả 0bytes:Sử dụng MemoryStream với FileStreamResult có thể?

public FileResult GetZipFiles(int documentId) { 
     var file = fileRepository.Get(documentId); 
     var zip = new ZipFile(); 
     var stream = new MemoryStream(); 

     var filePath = Path.Combine(UploadsFolder, Path.GetFileName(file.Id)); 

     zip.AddFile(filePath); 
     zip.Save(stream); 

     var result = new FileStreamResult(stream, "application/zip") 
        { FileDownloadName = "hey.zip" }; 

     return result; 
} 

Một lần nữa, tôi có thể xác minh dòng đó không phải là trống rỗng, nhưng điều này sẽ luôn trả lại hồ sơ hey.zip dưới dạng 0byte. Tôi phải sử dụng MemoryStream sai ở đây? Hoặc FileStreamResult có làm điều gì đó mà tôi không mong đợi? Tôi đã sử dụng FileStreamResult trước đây, nhưng không sử dụng với MemoryStream.

Trả lời

45

Bạn đã thử đặt stream.Position = 0; sau khi bạn thực hiện zip.Save(stream)?

Ngoài ra, bạn có thể xác nhận dữ liệu đó thực sự được ghi vào luồng. Kiểm tra stream.Length sau zip.Save. Nếu stream.Length bằng 0, thì không có gì được viết.

+0

+1 cho câu đầu tiên, -1 cho câu thứ hai vì anh ta đã thấy nó không trống trong trình gỡ lỗi. –

+0

@ Joel: Đoán tôi đã bỏ lỡ điều đó. –

+0

không biggie, tôi đã trao cho bạn phiếu bầu bổ sung –

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