azure - Azure 存储 CloudBlockBlob.PutBlockAsync() HTTP 标头之一的值格式不正确。
问题描述
我正在开发一个带有后端 web api ASP.NET CORE 2.1 和前端 angular 6 的网站。
在这个站点中,我正在通过 web api 将大文件的上传与 microsoft.azure.storage 9.3.2 集成在一起。我正在按块进行分块,并将它们从 FE 发送到端点。在里面我执行以下逻辑:
var container = CloudStorageAccount.Parse(key).CreateCloudBlobClient().GetContainerReference(containerName);
var result = await container.CreateIfNotExistsAsync();
if (result)
{
await container.SetPermissionsAsync(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
}
BlockBlob = container.GetBlockBlobReference(blobName);
await fileUploadSession.BlockBlob.PutBlockAsync(block.BlockId, chunkStream, null);
我在这里有一个例外,上面写着“其中一个 HTTP 标头的值格式不正确。”
堆栈跟踪是:
在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__4`1.MoveNext() 在 C:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\WindowsRuntime\Core\Executor\Executor.cs:line 316 --- 从先前引发异常的位置结束堆栈跟踪 --- 在 Microsoft.WindowsAzure.Storage 的 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()。 C:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\WindowsRuntime\Blob\CloudBlockBlob.cs:line 1020 中的 Blob.CloudBlockBlob.d__62.MoveNext() --- 来自先前异常位置的堆栈跟踪结束抛出 --- 在 System.Runtime.CompilerServices.TaskAwaiter 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()。HandleNonSuccessAndDebuggerNotification(Task task) at vidiwin2Api.Controllers.VideosController.d__18.MoveNext() in D:\repos\vidiwin2api\vidiwin2Api\Controllers\VideosController.cs:line 469
最令人惊奇的是,我在旧版本中具有相同的功能,在 Framework 4.6 和 microsoft.azure.storage 6.0.0 上使用 BE web api,并且这有效!
我已经在 PutBlockAsync 中测试了所有类型的参数,并且总是出现相同的异常。
任何人都可以帮助我吗?
解决方案
我遇到了同样的错误,因为我在调用 PutBlockAsync() 之前忘记将流位置重置为 0。尝试
chunkStream.Position = 0;
await fileUploadSession.BlockBlob.PutBlockAsync(block.BlockId, chunkStream, null);
否则检查异常的 ExtendedErrorInformation 属性。在那里,您将找到有关错误 HTTP 标头的其他信息。
推荐阅读
- sql - 如何比较包含数百万个条目但列不同的两个表
- python - 测试 Kafka 流位置的值
- javascript - Ajax 将表单数据的请求发布到 node/express
- typescript - 推断函数参数类型并在 Typescript 中传播
- python - 为 pygame 创建一个库,我的全局变量不起作用
- qliksense - 如何计算每个漏洞超过 10000 个的资产数量
- php - $_SERVER['PHP_SELF']; 解析动作表单中的错误
- javascript - 如何让 javascript 在我的 HTML 页面上编写消息?
- google-tag-manager - VideoJS nteraction 不会触发谷歌标签管理器
- c# - C# & MongoDB.Driver - 为什么我找不到文档提到的异步方法?