如何使Azure存储(blob)工作?

时间:2014-05-09 02:48:25

标签: azure azure-storage-blobs

我使用Azure blob来存储图像。我在本地机器上测试(使用模拟器)并且它可以工作。如您所知,它使用像

这样的URI
http://127.0.0.1/xxx

但是在我部署到Azure之后,它无法正常工作。我有

(1)将StorageConnectionString更改为指向Azure blob(而不是本地模拟的blob)

(2)改变了' off'到容器'

(3)将此blob链接到我的网站

我无法想到我需要做的任何事情才能让它发挥作用。

任何人都可以帮助我吗?

修改

更多信息:

on local:

<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)

2 个答案:

答案 0 :(得分:2)

指向存储中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

答案 1 :(得分:1)

感谢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/"

这很有效。