c# - 从 URL 获取 TIF 并将其移动到 C# 中的 Azure Blob 存储中

标签 c# azure azure-blob-storage

我正在调用一个 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/

相关文章:

c# - MVC 2 - 不保存十进制值

azure - 为什么azure网站需要Owin?

c# - 在 Azure 函数应用程序 blobtrigger 中设置 blob 的内容类型

C# 如何使用 linq 按索引对文件列表进行排序

c# - 如何跨多个帐户使用 Outlook 插件捕获已发送的项目?

c# - TypeLoadException : Method 'Create' in type . ..没有实现(错误如下)

c# - 在 VS 中的本地网络服务器上测试子域

azure - 如何检查Azure存储队列是否有消息

azure - az 存储帐户网络规则不适用于 Microsoft 托管代理 (Azure DevOps)

c# - WPF 数据网格绑定(bind)错误?