Azure存储CloudBlockBlob.PutBlockAsync()HTTP标头之一的值格式不正确。

时间:2018-10-01 14:47:54

标签: azure azure-storage

我正在使用后端Web api ASP.NET CORE 2.1和前端angular 6开发一个网站。

在此站点中,我正在通过microsoft.azure.storage 9.3.2通过Web API集成大文件的上传。我正在按块进行分块,然后将它们从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标头之一的值格式不正确。”

stackTrace是:

at 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中:316行 ---从之前引发异常的位置开始的堆栈结束跟踪---    在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.d__62.MoveNext()中的C:\ Program Files(x86)\ Jenkins \ workspace \ release_dotnet_master \ Lib \ WindowsRuntime \ Blob \ CloudBlockBlob.cs:line 1020 ---从之前引发异常的位置开始的堆栈结束跟踪---    在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在D:\ repos \ vidiwin2api \ vidiwin2Api \ Controllers \ VideosController.cs:line 469中的vidiwin2Api.Controllers.VideosController.d__18.MoveNext()中

最令人惊讶的是,我在较早版本中具有相同的功能,并在Framework 4.6和microsoft.azure.storage 6.0.0上使用了BE Web api,并且可以正常工作!

我已经在PutBlockAsync中测试了所有类型的参数,并且始终具有相同的异常。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

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

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

否则,请检查Exception上的ExtendedErrorInformation属性。在那里,您会找到有关错误的HTTP标头的其他信息。