web-dev-qa-db-ja.com

asp.net WebAPIコアからIActionResultとして画像を返します

Asp.net Web APIコアの使用中に画像ファイルをIActionResultとして返す最良の方法は何ですか? base64文字列を返してみましたが、問題なく動作します。しかし、効率的とは見なされていません。画像ファイルオブジェクト自体をIActionResultとして返す方法はありますか?.

6
Satyajit

ControllerまたはControllerBaseから継承するコントローラーでは、File()関数のさまざまなオーバーロードを使用できます。

たとえば、次のことができます。

return File("~/Images/photo.jpg", "image/jpeg");

これは仮想パスを使用します。他のオプションには、バイト配列またはStreamを指定することが含まれます。必要に応じて、3番目の引数としてダウンロードファイル名を指定することもできます。

10
juunas
[Route("getProductImage/v1")]
    [HttpGet]
    public async Task<IActionResult> getProductImage(GetProductImageQueryParam parammodel)
    {
        using (HttpClient client = new HttpClient())
        {
            MNimg_URL = MNimg_URL + parammodel.modelname;
            HttpResponseMessage response = await client.GetAsync(MNimg_URL);
            byte[] content = await response.Content.ReadAsByteArrayAsync();
            //return "data:image/png;base64," + Convert.ToBase64String(content);
            return File(content, "image/png", parammodel.modelname);
        }
    }

.netコアWebAPIでは、上記のコードを使用できます

ここでGetProductImageQueryParamは、入力パラメーターを持つクラスです。

4
Shigil P V

streamまたはbytes formatのreturn fileを使用するか、そのimage pathを使用して画像を返すことができます。

return File(//parameters);には、mvcコントローラーのアクションメソッドで使用できるオーバーロードされたメソッドがいくつかあります。

APIコントローラー

[Route("api/[controller]")]
public class FileController : Controller {

    //GET api/file/id
    [HttpGet("{id}"]
    public async Task<IActionResult> GetFile(string id) {
        var stream = await {{//__get_stream_here__//}};
        var response = File(stream, "application/octet-stream"); // FileStreamResult
        return response;
    }    
}

または

var imageFileStream = System.IO.File.OpenRead("// image path");
return File(imageFileStream, "image/jpeg");

これがお役に立てば幸いです。

2
Amol Bhor

Fileの結果は、NET Core3.xではFileContentResultと呼ばれます。

1
Bernoulli IT