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

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

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.

1 ответов


вы пробовали установка stream.Position = 0; после того, как вы выполните zip.Save(stream)?

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