【发布时间】:2021-03-24 16:10:48
【问题描述】:
我不确定我在哪里做错了什么,但我使用 DotNetZip 库创建的 zip 正在创建一个内容为空白的 zip 文件。或者 zip 中的文件大小显示为 0Kb 并且无法打开。
代码:
public static async Task DotNetZipFileAsync(MemoryStream stream, string bucket, List<List<string>> pdfFileSet, IAmazonS3 s3Client)
{
using Ionic.Zip.ZipFile zip = new ZipFile();
foreach (var pdfFile in pdfFileSet)
{
foreach (var file in pdfFile)
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucket,
Key = file
};
using GetObjectResponse response = await s3Client.GetObjectAsync(request);
using Stream responseStream = response.ResponseStream;
ZipEntry zipEntry = zip.AddEntry(file.Split('/')[^1], responseStream);
await responseStream.CopyToAsync(stream);
}
}
zip.Save(stream);
stream.Seek(0,SeekOrigin.Begin);
await stream.CopyToAsync(new FileStream(@"C:\LocalRepo\Temp.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite));
}
}
}
【问题讨论】:
-
这个参数
stream有什么用?将响应复制到此流可能会消耗整个下载的内容。 -
就是将内容写入stream,然后从stream中创建一个zip文件。
-
不,看看documentation:
AddEntry的第二个参数应该是在调用zip.Save()时可读的流。因为您之前正在处理 responseStream,所以它不起作用。 -
没听懂,你的意思是
responseStream正在处理,在哪里? -
在其范围的末尾(
})