web-dev-qa-db-ja.com

Web Api 2-ディスクに保存せずにHTTPGETからイメージ(Azure StorageからのMemoryStream)を返す方法は?

C#とAzureでWeb Api 2を使用していますが、ページに表示するために画像(Memorystreamからのベース)を返す方法に問題があります...

これが私のコントローラーHTTPGETです

[Route("api/PhotoSubmit/GetPhoto/{id}")]
    [HttpGet]
    public HttpResponseMessage GetPhotoById(int id)
    {
        StorageServices storage = new StorageServices();
        MemoryStream ms = storage.DownloadBlob(id);
        // return what ?
    }

これがサービスコールの始まりです:

$http({
            method: 'GET',
            url: 'api/PhotoSubmit/GetPhoto/' + $routeParams.id,
            accept: 'application/json'
        })
        .success(function(result) {
        // How do i handle the result and what HTML should i use ? <img ?
    });
8
Terje Nygård

クライアント側からは、$ httpを使用する必要はありません。プレーンな古いHTMLを使用することでプロセスを簡素化できます...

<img src="/api/PhotoSubmit/GetPhoto/2232" />

動的画像の場合は、次のようなJQueryを使用します...

$('#ImageLocation').html('<img src="/api/PhotoSubmit/GetPhoto/' + intID + '" />');

Webブラウザーは、画像のHTTP要求を行う作業を自動的に実行するため、複雑さが軽減されます。

サーバー側では、このようなプロセスを使用してファイルをロードし、クライアントにストリーミングできます。サーバーコードが次のような正しいMIMEタイプを返すことが重要です...

context.Response.ContentType = "image/png";

リソース:

ASP .Net Web APIが画像をバイナリとしてダウンロード

...そして...

ashxハンドラーを使用して画像を表示

8
Ty H.