c# - 在 Azure Blob 存储中处理上传的 Zip 文件
问题描述
我有一个 Azure 函数,当 blob 上传到某个目录时会触发该函数。它处理一个 zip 文件。当我使用 Azure 存储资源管理器将文件上传到容器时,它运行良好。当我通过 Web API 上传它时,它会爆炸。但是,如果我下载该文件,它似乎已损坏,但是它与源文件的大小相同,并且当我在 2 之间进行无法比较时,似乎相同(并且无法比较似乎可以看到 zip 的内容文件)。
这是上传代码:
public async Task<UploadedFileDescription> StoreCatalog(HttpRequestMessage Request)
{
UploadedFileDescription upload = new UploadedFileDescription(); // my return description
var guidString = Guid.NewGuid().ToString();
string fileName = guidString + ".zip"; //add the .zip extenstion
upload.fileName = fileName;
string storageConnection = CloudConfigurationManager.GetSetting("StorageConnectionString");
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(storageConnection);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("uploadedzips");
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(fileName);
cloudBlockBlob.Properties.ContentType = "application/x-zip-compressed";
var stream = await Request.Content.ReadAsStreamAsync();
cloudBlockBlob.UploadFromStream(stream);
return upload;
}
该文件可以很好地进入 blob 存储。
然后触发的 Azure 函数在这条线上触发并爆炸:
ZipArchive archive = new ZipArchive(myBlob);
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destinationStorage);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(destinationContainer);
var catalogService = Helpers.container.Resolve<ICatalogService>();
foreach (ZipArchiveEntry file in archive.Entries) <------blows up here with the msg
System.IO.InvalidDataException
HResult=0x80131501
Message=Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.
Source=System.IO.Compression
StackTrace:
at System.IO.Compression.ZipArchive.ReadCentralDirectory()
at System.IO.Compression.ZipArchive.get_Entries()
at DentaCAD.AzureFunctions.ProcessUploadedZip.Run(Stream myBlob, String name, TraceWriter log) in C:\repo\ProcessUploadedZip.cs:line 35
at Microsoft.Azure.WebJobs.Host.Executors.VoidMethodInvoker`2.InvokeAsync(TReflected instance, Object[] arguments)
at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2.<InvokeAsync>d__9.MoveNext()
当手动上传文件时命中该行时,存档中有 163 个条目(所有小jpg
文件)
有什么想法吗?
解决方案
这可能是错误的 MIME 类型的问题。尝试将内容类型更改"application/zip"
为"application/x-zip-compressed"
推荐阅读
- highcharts - Highcharts 导出服务器不服务两个并行请求
- c++ - 超过时限
- java - 我正在尝试使用不同类中的方法,但它会产生错误
- unix - Unix将所有文件从主目录移动到另一个文件夹
- python - 气流:ExternalTaskSensor 无法按预期工作。不同的任务计划
- node.js - 挂钩 assert.* 函数
- rust - 产生数量合理的 Tokio 任务
- flutter - Flutter GeoLocator PermissionRequestInProgressException
- security - 如何使用实例给出的相同 access_token 在画布 lms 中保护我的 lti 工具?
- c# - Unity 中的 Resharper 和 linting C#