今天有个场景需要webapi返回给客户端回应一个图片,以前的老套路不能用了。刚开始以为是需要使用“HttpResponseMessage“,直接使用HttpResponseMessage输出文件流
[HttpGet] [Route("get")] public HttpResponseMessage Get() { string path = @"C:\Users\***\Desktop\img0a28a1cbc674acd370585883abba3172.jpg"; HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK); var bytes = GetIMGbyte(path); message.Content = new ByteArrayContent(bytes); message.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg"); message.Content.Headers.ContentLength = bytes.Length; return message; }当我在浏览器中调用此终结点时,.Net Core 下 Web API会将HttpResponseMessage的HTTP内容标头设置为,以JSON形式返回application/json。
在dnx或者是asp.net core的webapi里面,如果要返回一个图片,需要返回一个IActionResult类型的,因为这两个的框架把HttpResponseMessage 当成一个model来处理的,所以使用HttpResponseMessage 始终返回Json
{ "version":{ "major":1,"minor":1,"build":-1,"revision":-1,"majorRevision":-1,"minorRevision":-1 }, "content":{ "headers":[ {"Key":"Content-Type","Value":["image/jpg"]}, {"Key":"Content-Length","Value":["206371"]} ] }, "statusCode":200,"reasonPhrase":"OK","headers":[],"trailingHeaders":[],"requestMessage":null,"isSuccessStatusCode":true }您可以使用以下方法返回FileResult:
1:返回FileContentResult
[HttpGet] [Route("get2")] public async Task<FileContentResult> GetFiel() { string path = @"C:\Users\admin\Desktop\hk\img0a28a1cbc674acd370585883abba3172.jpg"; var mimeType = "image/jpg"; var bytes = GetIMGbyte(path); return new FileContentResult(bytes, mimeType){ FileDownloadName = "1.jpg" //如果设置了FileDownloadName ,则浏览器会直接下载该文件,不设置则浏览器会直接显示图片 }; } private byte[] GetIMGbyte(string PicturePath) { //将需要存储的图片读取为数据流 FileStream fs = new FileStream(PicturePath, FileMode.Open, FileAccess.Read); Byte[] btye2 = new byte[fs.Length]; fs.Read(btye2, 0, Convert.ToInt32(fs.Length)); fs.Close(); return btye2; }2:返回FileStreamResult
[HttpGet] [Route("get3")] public async Task<FileStreamResult> GetFiel3() { string path = @"C:\Users\admin\Desktop\hk\img0a28a1cbc674acd370585883abba3172.jpg"; var stream = new FileStream(path, FileMode.Open); var mimeType = "image/jpg"; return new FileStreamResult(stream, mimeType) { FileDownloadName = "1.jpg" //如果设置了FileDownloadName ,则浏览器会直接下载该文件,不设置则浏览器会直接显示图片 }; }
参考资料:Return file in ASP.Net Core Web API
