25

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が0バイトとして返されます。私はMemoryStreamここで間違って使用しているに違いありませんか?それともFileStreamResult、私が期待していないことをしますか?以前に使用したことがありますが、では使用FileStreamResultしていませんMemoryStream

4

1 に答える 1

54

設定stream.Position = 0;してみましたzip.Save(stream)か?

また、データが実際にストリームに書き込まれていることを確認できます。stream.Length後に確認してくださいzip.Save。がゼロの場合stream.Length、何も書き込まれていません。

于 2010-09-13T17:00:16.947 に答える