mar*_*ial 10 asp.net azure-storage-blobs
asp.net 4.5,Web Forms,vs2013,Identity 2.0,Entity Framework 6.0
我计划使用Azure存储blob来存储用户上传的图像.所以我下载了Azure存储模拟器以在我的本地计算机上进行测试.
似乎正确创建容器并正确保存图像 - 因为我在运行应用程序时没有收到任何异常.
但问题是我无法在我的网页上看到这个图像.调试代码,我看到这个图像的URI是
http://127.0.0.1:10000/devstoreaccount1/images/my_sub_folder_2/my_image.jpg
Run Code Online (Sandbox Code Playgroud)
我把这个url粘贴到浏览器上,IE告诉我:
The webpage cannot be found 404
Run Code Online (Sandbox Code Playgroud)
Chrome告诉我:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>ResourceNotFound</Code>
<Message>
The specified resource does not exist. RequestId:e4b64fa8-5985-4aa4-bfbe-50aabd497537 Time:2014-04-21T07:26:04.4264011Z
</Message>
</Error>
Run Code Online (Sandbox Code Playgroud)
我使用AzureStorageAccess.CreateContainer()在存储中创建容器,并使用AzureStorageAccess.UploadBlob()将用户上载的图像(流)保存到存储中.代码如下.
public class AzureStorageAccess
{
// create a container in Azure Storage Emulator
static public void CreateContainer(string containerName)
{
CloudStorageAccount storageAccount = CloudStorageAccount
.Parse("UseDevelopmentStorage=true");
// CloudConfigurationManager.GetSetting("StorageConnectionString")
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
}
// upload a stream to Azure Storage Emulator
static public void UploadBlob(System.IO.Stream stream, string containerName, string blobRelativeURI, out string blobURI)
{
CloudStorageAccount storageAccount = CloudStorageAccount
.Parse("UseDevelopmentStorage=true");
// CloudConfigurationManager.GetSetting("StorageConnectionString")
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobRelativeURI);
blockBlob.UploadFromStream(stream);
blobURI = blockBlob.Uri.AbsoluteUri;
}
}
Run Code Online (Sandbox Code Playgroud)
我在web.config中有这个连接字符串.最初我使用的是这个连接字符串.后来当我试图解决问题时,我在stackoverflow中阅读了一些我应该使用的帖子Parse("UseDevelopmentStorage=true").您可以在上面的代码中看到读取此连接字符串的代码.
<add key="StorageConnectionString" value="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1"
/>
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这是什么问题?非常感谢你!
Luk*_*der 37
这种情况正在发生,因为容器默认关闭公共读取访问权限.如果将Public Read Access属性更改为Container使用,则可以从浏览器访问blobVisual Studio Server Explorer

或者,如果您想通过SDK在代码中执行此操作,请在创建容器之前添加以下行.
//Create container
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Container });
container.CreateIfNotExists();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |