我正在开发一个带有后端 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);
Run Code Online (Sandbox Code Playgroud)
我在这里有一个例外,它说“其中一个 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 --- 从上一个引发异常位置的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.WindowsAzure.Storage。 Blob.CloudBlockBlob.d__62.MoveNext() in 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(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 中测试了所有类型的参数,并且总是出现相同的异常。
任何人都可以帮助我吗?
小智 5
我有同样的错误,因为我忘记在调用 PutBlockAsync() 之前将流位置重置为 0。尝试
chunkStream.Position = 0;
await fileUploadSession.BlockBlob.PutBlockAsync(block.BlockId, chunkStream, null);
Run Code Online (Sandbox Code Playgroud)
否则检查 Exception 上的 ExtendedErrorInformation 属性。在那里您将找到有关错误 HTTP 标头的其他信息。
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |