从asp.net web api core返回一个图像作为IActionResult

时间:2017-05-18 04:59:58

标签: asp.net-core asp.net-core-webapi

使用asp.net web api核心时,将图像文件作为IActionResult返回的最佳方法是什么? 我尝试返回一个base64字符串,它工作正常。但不认为有效。 有没有办法可以将图像文件对象本身作为IActionResult返回。

4 个答案:

答案 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