Каков наилучший способ вернуть файл изображения как IActionResult при использовании ядра веб-API asp.net? Я попытался вернуть строку base64, и она отлично работает. Но не считается эффективным. Есть ли способ вернуть сам объект файла изображения как IActionResult.
Вернуть изображение из ядра веб-API asp.net как IActionResult
Ответы (4)
Вы можете использовать различные перегрузки функции File()
в контроллерах, которые наследуются от Controller
или ControllerBase
.
Например, вы можете:
return File("~/Images/photo.jpg", "image/jpeg");
Здесь используется виртуальный путь, другие варианты включают предоставление ему байтового массива или Stream
. Вы также можете указать имя загружаемого файла в качестве третьего аргумента, если это необходимо.
[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);
}
}
В веб-API ядра .NET вы можете использовать приведенный выше код
здесь GetProductImageQueryParam - это класс с входными параметрами
Результат File
называется FileContentResult
в NET Core 3.x.
Вы можете вернуть изображение, используя файл возврата в формате поток или байтов или используя его путь к изображению.
Есть несколько перегруженных методов для 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;
}
}
or
var imageFileStream = System.IO.File.OpenRead("// image path");
return File(imageFileStream, "image/jpeg");
Надеюсь, что это поможет вам.