Подтвердить что ты не робот

Возможно использование MemoryStream с FileStreamResult?

Я использую DotNetZip для создания zip файла и передачи его в FileResult. При отладке я могу проверить, что MemoryStream содержит файл, но когда я запускаю его через FileStreamResult, он возвращает 0 байт:

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;
 }

Опять же, я могу проверить, что поток не пуст, но это всегда будет возвращать файл hey.zip как 0bytes. Я должен использовать MemoryStream здесь неправильно? Или FileStreamResult делает то, чего я не ожидаю от этого? Я использовал FileStreamResult раньше, но не с MemoryStream.

4b9b3361

Ответ 1

Вы пытались установить stream.Position = 0; после выполнения zip.Save(stream)?

Кроме того, вы можете подтвердить, что данные фактически записываются в поток. Проверьте stream.Length после zip.Save. Если stream.Length равно нулю, то ничего не записывается.