Asp.net Web APIコアの使用中に画像ファイルをIActionResultとして返す最良の方法は何ですか? base64文字列を返してみましたが、問題なく動作します。しかし、効率的とは見なされていません。画像ファイルオブジェクト自体をIActionResultとして返す方法はありますか?.
Controller
またはControllerBase
から継承するコントローラーでは、File()
関数のさまざまなオーバーロードを使用できます。
たとえば、次のことができます。
return File("~/Images/photo.jpg", "image/jpeg");
これは仮想パスを使用します。他のオプションには、バイト配列またはStream
を指定することが含まれます。必要に応じて、3番目の引数としてダウンロードファイル名を指定することもできます。
[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は、入力パラメーターを持つクラスです。
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");
これがお役に立てば幸いです。
File
の結果は、NET Core3.xではFileContentResult
と呼ばれます。