我正在调用一个 API,该 API 返回获取 TIF 图像的路径,其中包含身份验证。
该路径在 Postman 和我的浏览器中均有效。\
我想将其上传到 Azure Blob 存储。
图像大小为几K。
我正在生成一个 GUID,在本例中为 a7a67740-b809-48e0-a154-686c54c649d6,并使用与 Azure blob 存储的连接上传到具有合法名称的容器,该连接在此项目的其他类中运行良好。
不幸的是,当我尝试使用此代码上传图像时:
CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{blobName}.tif");
await blockBlob.UploadFromFileAsync(tif.ToString());
它向我抛出了这个错误:
System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
at System.IO.Path.GetFileName(String path)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.BeginUploadFromFile(String path, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext, AsyncCallback callback, Object state) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 963
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.BeginUploadFromFile(String path, AsyncCallback callback, Object state) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 938
at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.TaskFromVoidApm[T1](Func`4 beginMethod, Action`1 endMethod, T1 arg1, CancellationToken cancellationToken) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Util\AsyncExtensions.cs:line 174
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.UploadFromFileAsync(String path, CancellationToken cancellationToken) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 1065
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.UploadFromFileAsync(String path) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 1053
at DbMgr.AstroDigital.<GetTasksAsync>d__1.MoveNext() in C:\Users\BaruchKogan\Documents\Visual Studio 2017\Projects\DbMgr\DbMgr\AstroDigital.cs:line 147
最佳答案
blockBlob.UploadFromFileAsync
要求您指定本地计算机上的文件路径。由于您在那里指定了 URL,因此会收到此错误。
从您的问题来看,您获得的 URL 似乎是可公开访问的,即您可以获取该 URL 并将其复制到浏览器的地址栏中,您将看到该图像。如果是这种情况,那么您应该使用 CopyBlob
方法通过此 URL 创建 Blob。
CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{blobName}.tif");
await blockBlob.StartCopyAsync(tif);//Assuming "tif" is an object of type System.Uri
Azure 存储服务将执行的操作是从 URI 中读取该图像的内容,并使用该图像创建一个 block blob。
关于c# - 从 URL 获取 TIF 并将其移动到 C# 中的 Azure Blob 存储中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541384/