簡體   English   中英

從URL提取TIF並將其移到C#中的Azure Blob存儲中

[英]Taking a TIF from a URL and moving it into Azure blob storage in C#

我正在調用一個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中讀取此圖像的內容,並使用它創建一個塊Blob。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM