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

标签 azure azure-storage

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

在此站点中,我将通过 Web api 上传大文件与 microsoft.azure.storage 9.3.2 集成。我正在按 block 进行分块,并将它们从 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);

这里有一个异常(exception),即“HTTP header 之一的值格式不正确。”

堆栈跟踪是:

位于 C:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\WindowsRuntime\Core\Executor\Executor.cs 中的 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__4`1.MoveNext() :第 316 行 --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 C:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\WindowsRuntime\Blob\CloudBlockBlob.cs 中的 Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.d__62.MoveNext() 处:第 1020 行 --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 D:\repos\vidiwin2api\vidiwin2Api\Controllers\VideosController.cs 中的 vidiwin2Api.Controllers.VideosController.d__18.MoveNext() 处:第 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 header 的更多信息。

关于Azure 存储 CloudBlockBlob.PutBlockAsync() HTTP header 之一的值格式不正确。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593671/

相关文章:

azure - 更改 Windows Azure 网站上的脚本超时

python - Azure 存储访问被拒绝

azure-functions - 使用多个 Azure Functions QueueTriggers 监听同一个存储队列

c# - 如何从Azure Function更新服务总线消息?

.net - 在 .NET 云中运行分布式计算的框架

c# - C# 中无法使用 Windows 性能计数器(在 Azure 辅助角色上)

azure - 通过 Azure 逻辑应用从 Azure 容器中上次修改的文件夹中获取 Blob 内容

具有自定义终结点后缀的 Azure 云存储帐户

python - 处理后将文件从 azure 存储容器上传到另一个容器时出现问题

azure - 在 adf 逻辑应用中使用有效负载运行时,逻辑应用抛出扩展的 ajax 错误