ASP.NET5,web api使用HttpResponseMessage返回图片问题

一蓑烟雨go 2017-11-08 05:05:41
我想使用url访问web api,web api处理后以HttpResponseMessage返回图片,但是结果返回的是一串json数据,在浏览器里显示如下:
{"Version":{"Major":1,"Minor":1,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1},"Content":{"Headers":[{"Key":"Content-Type","Value":["image/jpeg"]}]},"StatusCode":200,"ReasonPhrase":"OK","Headers":[],"RequestMessage":null,"IsSuccessStatusCode":true}
而我希望是显示一张图片
我的代码:
...全文
3413 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
风吹蛋蛋飘~ 2019-05-22
  • 打赏
  • 举报
回复
引用 9 楼 zhujiazhi 的回复:
好像在dnx或者是asp.net core的webapi里面,如果要返回一个图片,需要返回一个IActionResult类型的,因为这两个的框架把HttpResponseMessage 当成一个model来处理的 下面是在网上看到一个链接asp.net core web api return file
不错,改IActionResult
风吹蛋蛋飘~ 2019-05-22
  • 打赏
  • 举报
回复
引用 4 楼 丰云 的回复:
不知所谓的搞法。。。。 一个简单的事情,硬是弄得这么复杂,还容易出错。。。。 你有路径,有文件,直接返回这个文件的路径不就得了。。。。 如果图片路径不在网站内部,也可以设置虚拟路劲。 非要搞七搞八的,用一堆的东西,效率又低又出错。、、、、
不懂就别bb看9楼,楼主是搞api 又不是网站类型,搞安卓,苹果,小程序,或者是资源系统人家需要返回流,不是你网站连接ok?
飞鸟慕鱼 2019-03-12
  • 打赏
  • 举报
回复
引用 11 楼 一蓑烟雨go 的回复:
[quote=引用 10 楼 zhujiazhi 的回复:]
dnx vs .net core
dnx 已经移到.net core里面去了,以后应该就没有dnx的概念的了吧

非常感谢,确实如你所讲,返回IActionResult类型,设置好Response Headers的Content-Type就能输出图片了,代码如下
FileInfo fi = new FileInfo(imgPath + imgCode + "_1.jpg");
FileStream fs = fi.OpenRead(); ;
byte[] buffer = new byte[fi.Length];
//读取图片字节流
fs.Read(buffer, 0, Convert.ToInt32(fi.Length));
var response = File(buffer, "image/jpeg");
fs.Close();
return response;[/quote]
可以实现
一蓑烟雨go 2017-11-10
  • 打赏
  • 举报
回复
引用 10 楼 zhujiazhi 的回复:
dnx vs .net core dnx 已经移到.net core里面去了,以后应该就没有dnx的概念的了吧
非常感谢,确实如你所讲,返回IActionResult类型,设置好Response Headers的Content-Type就能输出图片了,代码如下 FileInfo fi = new FileInfo(imgPath + imgCode + "_1.jpg"); FileStream fs = fi.OpenRead(); ; byte[] buffer = new byte[fi.Length]; //读取图片字节流 fs.Read(buffer, 0, Convert.ToInt32(fi.Length)); var response = File(buffer, "image/jpeg"); fs.Close(); return response;
zhujiazhi 2017-11-10
  • 打赏
  • 举报
回复
dnx vs .net core dnx 已经移到.net core里面去了,以后应该就没有dnx的概念的了吧
zhujiazhi 2017-11-10
  • 打赏
  • 举报
回复
好像在dnx或者是asp.net core的webapi里面,如果要返回一个图片,需要返回一个IActionResult类型的,因为这两个的框架把HttpResponseMessage 当成一个model来处理的 下面是在网上看到一个链接asp.net core web api return file
zhujiazhi 2017-11-10
  • 打赏
  • 举报
回复
dnx好像也是关于跨平台的东西的,所以感觉和.net core是一个的效果的,在.net core里面也会报这个错的, 同样在.net core里面跑你的代码,也是出来一些json的,而不像在.net framework里面一样显示一张图片出来的, 对这块还不是太了解的,期待大神的解释的
一蓑烟雨go 2017-11-09
  • 打赏
  • 举报
回复
引用 2 楼 shuzhongxiao 的回复:
如果图像资源在服务端是于资源文件存储的,那么不需要返回图像的原始数据,只需要返回一个链接即可,客户端根据url再取获取图像。 如果不是资源文件,而是原始数据,可以将二进制数据先转为base64 的字符串,在json中发给客户端
图像资源是单独放在其它文件夹(非资源文件)中的,我想要的结果是通过一个url直接返回一张图片,类似这种<img class="" src="//img12.360buyimg.com/cms/jfs/t12598/49/11830699/70994/478ed234/5a01a628N82703b3b.jpg">, 而不是url请求之后要在js里面处理返回数据,比如这种 if(data!=null){ $("#divImg").show(); $("#bigImg").attr("src","data:image/jpeg;base64,"+data[0]); $("#middleImg").attr("src","data:image/jpeg;base64,"+data[1]); $("#smallImg").attr("src","data:image/jpeg;base64,"+data[2]); } 我再看看还有没有大神给出解决HttpResponseMessage的方法,同时谢谢你的回复
一蓑烟雨go 2017-11-09
  • 打赏
  • 举报
回复
引用 6 楼 zhujiazhi 的回复:
[quote=引用 5 楼 zhujiazhi 的回复:]

var stream = new FileStream(path, FileMode.Open);
HttpResponseMessage response = Request.CreateResponse();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");
response.Content.Headers.ContentLength = stream.Length;
return response;

这个代码在.net core下面实现不了效果的[/quote]
这个在web api 2上能运行,但在dnx451下会报错,如下图
shuzhongxiao 2017-11-09
  • 打赏
  • 举报
回复
如果图像资源在服务端是于资源文件存储的,那么不需要返回图像的原始数据,只需要返回一个链接即可,客户端根据url再取获取图像。 如果不是资源文件,而是原始数据,可以将二进制数据先转为base64 的字符串,在json中发给客户端
zhujiazhi 2017-11-09
  • 打赏
  • 举报
回复
引用 5 楼 zhujiazhi 的回复:

var stream = new FileStream(path, FileMode.Open);
            HttpResponseMessage response = Request.CreateResponse();
            response.StatusCode = HttpStatusCode.OK;
            response.Content = new StreamContent(stream);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");
            response.Content.Headers.ContentLength = stream.Length;
            return response;
这个代码在.net core下面实现不了效果的
zhujiazhi 2017-11-09
  • 打赏
  • 举报
回复

var stream = new FileStream(path, FileMode.Open);
            HttpResponseMessage response = Request.CreateResponse();
            response.StatusCode = HttpStatusCode.OK;
            response.Content = new StreamContent(stream);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");
            response.Content.Headers.ContentLength = stream.Length;
            return response;
丰云 2017-11-09
  • 打赏
  • 举报
回复
不知所谓的搞法。。。。 一个简单的事情,硬是弄得这么复杂,还容易出错。。。。 你有路径,有文件,直接返回这个文件的路径不就得了。。。。 如果图片路径不在网站内部,也可以设置虚拟路劲。 非要搞七搞八的,用一堆的东西,效率又低又出错。、、、、
一蓑烟雨go 2017-11-08
  • 打赏
  • 举报
回复
问题补充: responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");这句代码未生效,浏览器Network中显示Response Headers的Content-Type为application/json; charset=utf-8

62,071

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧