私はいくつかのバイト配列データでその場でzipストリームを作成し、それをMVCアクションを介してダウンロードしようとしています。ZipArchiveはデータ破損したエラーの予期しない終了を与えます
ただし、ダウンロードしたファイルは、Windowsで開くと常に次のような壊れたエラーが発生します。
そして、このエラー私は7zの
からxtractしかし、7Zから抽出されたファイルが破損していないことに注意してみてください。
私はZipArchive
を使用しています。以下は私のコードです。
private byte[] GetZippedPods(IEnumerable<POD> pods, long consignmentID)
{
using (var zipStream = new MemoryStream())
{
//Create an archive and store the stream in memory.
using (var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
{
int index = 1;
foreach (var pod in pods)
{
var zipEntry = zipArchive.CreateEntry($"POD{consignmentID}{index++}.png", CompressionLevel.NoCompression);
using (var originalFileStream = new MemoryStream(pod.ByteData))
{
using (var zipEntryStream = zipEntry.Open())
{
originalFileStream.CopyTo(zipEntryStream);
}
}
}
return zipStream.ToArray();
}
}
}
public ActionResult DownloadPOD(long consignmentID)
{
var pods = _consignmentService.GetPODs(consignmentID);
var fileBytes = GetZippedPods(pods, consignmentID);
return File(fileBytes, MediaTypeNames.Application.Octet, $"PODS{consignmentID}.zip");
}
私はここで間違っています。
私は一日中これに苦しんでいるので、どんな助けも高く評価されます。事前に
おかげ
を使用して 'zipArchive'の外側で' zipStream.ToArray() 'を移動します。 – john
@johnあなたは素晴らしい友達です。ありがとうございました。それは魅力のように働いた。 –