私はAzureのblobストレージに保存されている画像を表示しようとしているasp mvcアプリケーションを持っています。紺碧の塊の容器から画像を表示する
文字列を返すと、ブラウザは壊れたイメージとして表示されます。私は右クリックして「検査」と生成されたURIをクリックすると、私は次のようなメッセージ
BlobNotFound
The specified blob does not exist. RequestId:f7c32876-0001-013e-539d-dede28000000 Time:2016-07-15T13:30:49.7560775Z
を受け取る私はAzure Storage Explorer
をダウンロードして、ファイルを見ることができます。コンテナのアクセスレベルをread access for blobs only
からno public access
に変更しようとしました(ただし、私はそのコードで、PublicAccess = BlobContainerPublicAccessType.Blob
というコードを使っていました)。
ストレージに保存されている画像を表示するにはどうすればよいですか?
public string Index()
{
CloudBlockBlob blob = GetBlobInContainer("blobContainerTjsContainer", "PS-ICON-120x120_140.jpg");
return "<img src="+ blob.Uri.AbsoluteUri +" alt='PS Image'>";
}
CloudBlockBlob GetBlobInContainer(string container, string fileName)
{
//use web.config appSetting to get connection setting .NET Framework's ConfigurationManager class can also be used for this
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
//create the blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//retrieve a refernce to a container
CloudBlobContainer blobContainer = blobClient.GetContainerReference(CloudConfigurationManager.GetSetting(container));
//set permission to show to public
blobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob});
blobContainer.CreateIfNotExists();
// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(fileName);
return blockBlob;
}
EDIT
さらに読み取り後、私は、これが例外
戻るを変更// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(fileName);
blockBlob.Properties.ContentType = "image/jpg";
blockBlob.SetProperties();
return blockBlob;
に
// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(fileName);
return blockBlob;
を変更しました
アップロード時に別の処理を行う必要はありますか?
編集
@Gaurav Mantri
私はそれがapplication/octet-stream
として格納されていることがわかりますが、私は、画像/ JPGに変更しようとしたとき
blockBlob.Properties.ContentType = "image/jpg";
blockBlob.SetProperties();
を使用することができます
私は設定されたプロパティで404の例外を得ました。私は、画像を引くと、デバッグ中に私はイメージ名が、それは私がアップロードの時点で
をアップロードしたとき、私はからのコメントへ
void UploadFile(string filePath)
{
//use web.config appSetting to get connection setting .NET Framework's ConfigurationManager class can also be used for this
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
//create the blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//retrieve a refernce to a container
CloudBlobContainer blobContainer = blobClient.GetContainerReference(CloudConfigurationManager.GetSetting("blobContainerTjsContainer"));
//create a container if it doesnt exist
blobContainer.CreateIfNotExists();
//gets the reference to the blob that will be written or OVER written
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference("my-image-blob");
using (var fileStream = System.IO.File.OpenRead(filePath))
{
blockBlob.UploadFromStream(fileStream);
}
}
あなたのBLOBコンテナに 'PS-ICON-120x120_140.jpg'というファイルがありますか? Azure Storage Explorerからそのスクリーンショットを共有できますか? –
私は十分な余分な情報を追加しようとしましたが、もっと必要な場合にお知らせください – tony09uk
ありがとうございます。だから私はいくつか気づいた:1) 'UploadFile'では、' GetBlobInContainer'関数でBLOBコンテナのACLを設定しているようにしていません。 blobコンテナのACLが本当に 'Blob'で、' Private'ではないかどうか確認してください。 2)実際に 'GetBlobInContainer'関数に' UploadFile'で行っているものとは違うブロブ名を渡しています。両方が同じであることを確認してください。 –