我正在从Azure blob容器下载文件。如果我只创建一个目录,我的代码运行良好,但如果我试图创建多个目录,zip文件就会损坏。
var users = new List<long>();
users .Add(1);
users .Add(2);
users .Add(3);
foreach (var user in users)
using (var zipOutputStream = new ZipOutputStream(Response.OutputStream))
{
foreach (CloudBlockBlob item in container.ListBlobs(prefix: blobNamePrefix, useFlatBlobListing: true))
{
zipOutputStream.SetLevel(0);
var blob = container.GetBlockBlobReference(item.Name);
var entry = new ZipEntry(item.Name);
zipOutputStream.PutNextEntry(entry);
blob.DownloadToStream(zipOutputStream);
}
zipOutputStream.Finish();
zipOutputStream.Close();
}
Response.BufferOutput = false;
Response.AddHeader("Content-Disposition", "attachment; filename=" + "zipFileName.zip");
Response.ContentType = "application/octet-stream";
Response.Flush();
Response.End();
}
如果我只使用一个用户,那么它会在zip文件中创建一个新文件夹,并在其中添加所有用户blob文件。但确实对多人有效。
您的问题是,使用zipOutputStream在for each block中。
它适用于一个用户,但不适用于几个用户。
为using zipOutputStream块内的用户移动for each块。