私はAzure Blobストレージコンテナからブロブをダウンロードし、画像タグに表示しようとしています。Azure blobをダウンロードし、画像タグにデータURLとして設定します。
以下の質問では、Web APIからストリーム形式でBLOBを返す方法を確認できます。
Getting 403 error when trying to retrieve an Azure blob on Web API request
HTTPレスポンスから、私はリクエストのヘッダ部に含めることによって、ブロブのコンテンツタイプを取得することができています。それを使用して、イメージタグで使用されるデータURIを生成します。イメージタグのsrc属性にストリームを含めるには、ストリームをbase64文字列に変換する必要があることを理解しています。私は現在、HTTPリクエストからの結果をbase64文字列に変換するのに苦労しています。
'http://jsfiddle.net/chesco9/6a7ohgho/'
EDIT
感謝:
私は、これはデータ(画像)はbase64文字列にデータを変換する私の試みと一緒にHTTPリクエストから受け取っ含まフィドルをJS作成しましたあなたはトムあなたの助けになります。私はあなたのソリューションを実装することができました。私は数日間この問題に立ち往生していました。
public async Task<AzureBlobModel> DownloadBlob(Guid blobId)
{
try
{
//get picture record
Picture file = await _media.GetPictureAsync(blobId);
// get string format blob name
var blobName = file.PictureId.ToString() + file.Extension;
if (!String.IsNullOrEmpty(blobName))
{
var blob = _container.GetBlockBlobReference(blobName);
// Strip off any folder structure so the file name is just the file name
var lastPos = blob.Name.LastIndexOf('/');
var fileName = blob.Name.Substring(lastPos + 1, blob.Name.Length - lastPos - 1);
var fileLength = blob.Properties.Length;
var stream = await blob.OpenReadAsync();
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
var result = new AzureBlobModel()
{
FileName = fileName,
FileSize = blob.Properties.Length,
Stream = stream,
ContentType = blob.Properties.ContentType,
StreamBase64 = Convert.ToBase64String(ms.ToArray())
};
return result;
}
}
catch(Exception ex)
{
await _log.CreateLogEntryAsync("exception thrown: " + ex.ToString());
}
await _log.CreateLogEntryAsync("returning null");
// Otherwise
return null;
}
トム、これは私の問題を解決しました。 – chesco