使用asp.net web api核心时,将图像文件作为IActionResult返回的最佳方法是什么? 我尝试返回一个base64字符串,它工作正常。但不认为有效。 有没有办法可以将图像文件对象本身作为IActionResult返回。
答案 0 :(得分:10)
您可以在继承自File()
或Controller
的控制器中使用ControllerBase
函数的各种重载。
例如,你可以这样做:
return File("~/Images/photo.jpg", "image/jpeg");
这使用虚拟路径,其他选项包括给它一个字节数组或Stream
。如果需要,您还可以将下载文件名作为第三个参数。
答案 1 :(得分:4)
[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 core web api中,您可以使用上面的代码
这里GetProductImageQueryParam是一个带输入参数的类
答案 2 :(得分:2)
您可以使用带有流或字节格式的返回文件或使用其图片路径返回图片。
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");
希望这会对你有所帮助。
答案 3 :(得分:1)
在NET Core 3.x中,一个File
结果称为FileContentResult
。