【发布时间】:2020-06-03 15:25:43
【问题描述】:
我正在循环浏览我的数据库中的文件名以及我在 azure 存储中的同一个文件。我正在压缩这 n 个文件并从 azure 存储下载。我将压缩文件保存到本地存储。当我提取并想查看一个文件时,它说损坏/损坏。
public ActionResult Download(string productid, string YearActiveid)
{
HomePageModel homepagemodel = new HomePageModel();
homepagemodel.ProdHeaderDetail = GetProductHeaderDetail(productid, YearActiveid);
homepagemodel.PriorYearsActive = GetPriorYearActive(productid, YearActiveid);
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=<name>;AccountKey=<key>;EndpointSuffix=core.windows.net");
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("product");
var blobFileNames = new string[] { "file1.png", "file2.png", "file3.png", "file4.png" };
var outputMemStream = new MemoryStream();
var zipOutputStream = new ZipOutputStream(outputMemStream);
foreach (var ProdHeaderDetail in homepagemodel.ProdHeaderDetail)
{
zipOutputStream.SetLevel(5);
var blob = cloudBlobContainer.GetBlockBlobReference(ProdHeaderDetail.FileName);
var entry = new ZipEntry(ProdHeaderDetail.FileName);
zipOutputStream.PutNextEntry(entry);
blob.DownloadToStreamAsync(zipOutputStream);
}
zipOutputStream.Finish();
//zipOutputStream.Close();
//zipOutputStream.CloseEntry();
zipOutputStream.IsStreamOwner = false;
outputMemStream.Position = 0;
return File(outputMemStream, "application/zip", "filename.zip");
}
【问题讨论】:
-
仅供参考,您刚刚向全世界泄露了您的存储帐户凭据。请立即刷新您的存储帐户密钥。我从你的问题中编辑了它们,但任何有足够代表的人仍然可以看到原件。
-
除此之外:请提供更多关于到底发生了什么的详细信息。否则,这个问题需要社区调试。对于您将原始内容放入 zip 文件的位置,我们一无所知。我们不知道任何其他细节,除了您无法创建具有零文件大小错误的 zip 文件。
-
当我提取 zip 文件并尝试打开文件 (Adobe acrobat) 时,它说文件损坏/损坏
-
对 - 我从你的原始描述中得到了这个。我建议添加有关您如何构建 zip 文件的更多详细信息。在这一点上有太多的未知数。请编辑您的问题以添加详细信息(请不要在 cmets 中添加详细信息)。
-
另外:我不知道你为什么删除了我的编辑,在我修复了你的格式问题、编辑了你的连接凭据并删除了你描述中不需要的 ***** 字符之后。我已使您的问题格式正确且易于阅读。因此,我回滚了编辑。
标签: azure azure-blob-storage zipoutputstream