我使用Azure blob来存储图像。我在本地机器上测试(使用模拟器)并且它可以工作。如您所知,它使用像
这样的URIhttp://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)
答案 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/"
这很有效。