如何使 Azure 存储 (blob) 工作?
Posted
技术标签:
【中文标题】如何使 Azure 存储 (blob) 工作?【英文标题】:How do you make Azure storage (blob) work? 【发布时间】:2014-06-26 16:13:22 【问题描述】:我使用 Azure blob 来存储图像。我在本地机器(使用模拟器)上进行了测试,它可以工作。如您所知,它使用类似
的 URIhttp://127.0.0.1/xxx
但是在我部署到 Azure 之后,它就不起作用了。我有
(1) 将 StorageConnectionString 更改为指向 Azure blob(而不是本地模拟 blob)
(2) 将 blob 访问权限从“关闭”更改为“容器”
(3) 将此 blob 链接到我的网站
我想不出我还需要做什么才能让它发挥作用。
谁能帮帮我?
编辑:
更多信息:
在本地:
<add key="StorageConnectionString" value="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1" />
在 Azure 上:
<add key="StorageConnectionString" value="DefaultEndpointsProtocol=http;AccountName=[myAccount];AccountKey=[myKey];BlobEndpoint=http://[myBolbName].blob.core.windows.net/" />
Azure 上的错误是(当我单击按钮上传图像时):
Application: 2014-05-09T07:45:12 PID[22228] Error Unable to connect to the remote server
Application: at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
Application: at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.UploadFromStreamHelper(Stream source, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)
Application: at xxx.Utility.AzureStorageAccess.UploadBlob(Stream stream, String containerName, String blobRelativeURI, String& blobURI)
Application: at xxx.xxx.xxx.btnSubmit_Click(Object sender, EventArgs e)
【问题讨论】:
您可以通过显示一些代码来帮助自己。 如果您要链接到您网站上的图片,您可能需要查看Azure CDN @BrendanGreen - 不知道您为什么要提出 CDN - 这与问题无关,因为问题不是询问如何优化客户端地理分布时公共 blob 访问的延迟。问题(虽然说明不佳)是关于正确使用 blob URI 的。 @martial - 你说的只是它不起作用。我们甚至不知道这意味着什么。正如约翰所说:展示你的代码。显示您正在使用的实际 URI(屏蔽您的唯一命名空间)。显示结果,或错误。显示 something. 就目前而言,您的问题无法回答。 @DavidMakogon:(3) 将此 blob 链接到我的网站。在没有代码证明问题的情况下,提及 Azure CDN 并非没有道理。 【参考方案1】:指向存储中 blob 的 URI 是:
http://accountName.blob.core.windows.net/container/blobName
因此,如果您的存储帐户名为 marvin
,容器名为 images
,blob 名称为 banner.png
,则 URI 为
http://marvin.blob.core.windows.net/images/banner.png
请注意,除非您希望人们能够列出容器中的 blob,否则您应该将公共访问级别设置为 blob
,这会使 blob 可见,但会阻止对容器本身的操作。
此外,为了让浏览器正确处理图像,您需要确保已将每个 blob 上的 ContentType 属性设置为正确的 MIME 类型,例如image/png
.
【讨论】:
您应该在此 url 中使用帐户名称BlobEndpoint=http://[myBolbName].blob.core.windows.net/
而不是 'myBlobName. So your Blob endpoint should be
myaccount.blob.core.windows.net`。【参考方案2】:
感谢 Simon W 的评论,当我开始用 try 和 catch 包装代码时,我发现了问题。
我的代码中有以下内容:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
我之所以使用它,是因为我在某处读到要使 blob 在本地工作,您需要使用“UseDevelopmentStorage=true”。
但这显然在部署到 Azure 时不起作用。所以我必须将其替换为:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse([my-real-storage-connection-string]);
[my-real-storage-connection-string]
在哪里
"DefaultEndpointsProtocol=http;AccountName=[myAccount];AccountKey=[myKey];BlobEndpoint=http://[myBolbName].blob.core.windows.net/"
这行得通。
【讨论】:
以上是关于如何使 Azure 存储 (blob) 工作?的主要内容,如果未能解决你的问题,请参考以下文章
Azure Blob 存储:从 Excel 工作簿中删除密码
源数据集中的动态工作表名称:Azure 数据工厂上的(Excel(Blob 存储))。 - 错误:请为您的数据集选择一个工作表