从Delphi REST服务器返回图像并显示在浏览器中
2014-05-06 22:46
309 查看
当你使用文件流对象从Delphi的REST服务器返回图像时,它不会正常显示在浏览器中,如下例:
这是因为Delphi REST服务器总是将返回内容的类型设置为text/html,这就导致你返回其它类型时浏览器不能加以区分,这是一个bug,因为大多数的返回内容为json,这就意味着返回内容的类型应该为applicatilon/json。所幸在服务器方法中我们可以改写返回内容的类型。
为此你需要引用"Data.DBXPlatform"单元,它包含一个名为GetInvocationMetadata的方法,它能够访问目前正在构建的返回响应对象,它返回一个TDSInvocationMetadata对象,它有一个名为ResponseContentType的属性。设置这个属性将会改写HTTP响应容的头部Content-Type的值。上面的例子可以改写为
现在,返回的图像就可以在浏览器中正常显示了。
http://stackoverflow.com/questions/13879238/return-an-image-from-a-delphi-rest-server-and-show-it-in-a-browser/13879240#13879240
function TServerClass.Image: TFileStream; begin Result := TFileStream.Create('pathtofile\image.png', fmOpenRead or fmShareDenyNone); end;
这是因为Delphi REST服务器总是将返回内容的类型设置为text/html,这就导致你返回其它类型时浏览器不能加以区分,这是一个bug,因为大多数的返回内容为json,这就意味着返回内容的类型应该为applicatilon/json。所幸在服务器方法中我们可以改写返回内容的类型。
为此你需要引用"Data.DBXPlatform"单元,它包含一个名为GetInvocationMetadata的方法,它能够访问目前正在构建的返回响应对象,它返回一个TDSInvocationMetadata对象,它有一个名为ResponseContentType的属性。设置这个属性将会改写HTTP响应容的头部Content-Type的值。上面的例子可以改写为
function TServerClass.Image: TFileStream; begin Result := TFileStream.Create('pathtofile\image.png', fmOpenRead or fmShareDenyNone); GetInvocationMetadata.ResponseContentType := 'image/png'; end;
现在,返回的图像就可以在浏览器中正常显示了。
http://stackoverflow.com/questions/13879238/return-an-image-from-a-delphi-rest-server-and-show-it-in-a-browser/13879240#13879240
相关文章推荐
- Byte Array to NSData——iOS将服务器返回的图片字节数组用UIImageView显示该图像
- 安卓textview,editview等显示emoji表情和提交服务器后返回解析
- 对FckEditor编辑器在MAXTHON浏览器下选择服务器文件对话框显示不正常的改进
- 服务器返回到浏览器的常见信息
- PHP实现提取一个图像文件并在浏览器上显示的代码
- Delphi图像处理 -- 图像显示
- 乱码(0):如何让浏览器按照指定编码打开服务器返回的html文件
- Xcode9学习笔记74 - 读取和解析Plist属性列表文件(获取远程服务器信息并显示返回数据)
- 从服务器中取得json返回的值,显示到网页上
- [置顶] JS预览图像将本地图片显示到浏览器上
- 解决FCKEditor编辑器在浏览器返回时显示html源代码的问题
- 地址的三级联动 选择后显示地区并返回服务器Id号(二)
- 传入url地址请求服务器api,浏览器显示图片
- 将C# Web Service返回的图片以流的形式显示在Delphi中的Image控件
- 根据服务器返回的状态改变前端显示的内容(Angular 过滤器)
- 从服务器返回的字符串,先转成byte[],然后保存到文件,listview根据uri获取显示
- 如何查看http请求和返回,浏览器和服务器沟通的过程
- DataSnap Rest 服务器网络分配器返回格式定义
- laravel 从route路由开始经过controller操作mysql数据库并返回结果显示在浏览器中 (select)
- ext JS Ext.form.FormPanel 如何显示提交后服务器返回的错误信息?