Использование 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
равно нулю, тогда ничего не записывается.