首页 > 解决方案 > 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 中测试了所有类型的参数,并且总是出现相同的异常。

任何人都可以帮助我吗?

标签: azureazure-storage

解决方案


我遇到了同样的错误,因为我在调用 PutBlockAsync() 之前忘记将流位置重置为 0。尝试

chunkStream.Position = 0;
await fileUploadSession.BlockBlob.PutBlockAsync(block.BlockId, chunkStream, null);

否则检查异常的 ExtendedErrorInformation 属性。在那里,您将找到有关错误 HTTP 标头的其他信息。


推荐阅读