【发布时间】:2013-12-31 00:45:57
【问题描述】:
我正在尝试通过 ashx 传递 Azure 存储 blob。在 blockBlob.DownloadToStream(memoryStream) 上,它抛出以下异常:Microsoft.WindowsAzure.Storage.StorageException: Calculated MD5 does not match existing property
我知道它正在寻找正确的 blob。如果我放入一个不存在的容器和路径,那么它会给我一个 404 异常。
我已经在 Google 上搜索了可能导致此错误的提示,但没有发现任何有用的信息。有人对可能导致这种情况的原因有任何想法吗?在过去的几天里,我用几种不同的方式重写了这段代码,但它总是在 DownloadToStream 上死掉。
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
public void ProcessRequest(HttpContext context) {
// Retrieve storage account from connection string.
Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("gmt");
// Retrieve reference to blob named "articles/142/222.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("articles/142/222.jpg");
using (var memoryStream = new MemoryStream()) {
blockBlob.DownloadToStream(memoryStream);
byte[] photoByte = ReadFully(memoryStream);
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
context.Response.OutputStream.Write(photoByte, 0, photoByte.Length);
}
}
public static byte[] ReadFully(Stream input) {
input.Position = 0;
using (MemoryStream ms = new MemoryStream()) {
input.CopyTo(ms);
return ms.ToArray();
}
}
【问题讨论】:
标签: c# asp.net azure azure-storage