【问题标题】:Azure storage CloudBlockBlob.PutBlockAsync() The value for one of the HTTP headers is not in the correct format.Azure 存储 CloudBlockBlob.PutBlockAsync() HTTP 标头之一的值格式不正确。
【发布时间】:2018-10-02 05:57:05
【问题描述】:

我正在使用后端 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 标头的值格式不正确。”

stackTrace 是:

在 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(任务任务) 在 vidiwin2Api.Controllers.VideosController.d__18.MoveNext() 在 D:\repos\vidiwin2api\vidiwin2Api\Controllers\VideosController.cs:line 469

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

我已经在 PutBlockAsync 中测试了所有类型的参数,并且总是出现相同的异常。

谁能帮帮我?

【问题讨论】:

    标签: azure azure-storage


    【解决方案1】:

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

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

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

    【讨论】:

    • 天哪.... 它有效!我还不明白为什么在旧版本中它没有分配流的位置就可以工作。无论如何......真的很感谢男人
    猜你喜欢
    • 1970-01-01
    • 2018-09-01
    • 2020-08-14
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2019-01-27
    相关资源
    最近更新 更多