起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hua_love2011

[处理中3] X5平台能显示tif格式的图片吗?

[复制链接]

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-16 16:29:39 | 显示全部楼层
本帖最后由 hua_love2011 于 2017-11-16 16:46 编辑
liangyongfei 发表于 2017-11-16 15:54
比看一下 浏览器的 网络请求!
应该是http://127.0.0.1:8080/baas//tx/tx/getImgInfo?code=123
比如你访 ...
QQ截图20171116164330.png
能访问到了,如果在浏览器直接访问地址,出来都是乱码。如果在界面中访问,图片也不显示。
如果生成图片存放到某个位置的话,是没问题的。
以下是我的后台代码:
public static JSONObject getImgInfo(JSONObject params, ActionContext context) throws JsonGenerationException, JsonMappingException, IOException {
                String code = params.getString("code"); // 获取图纸ID

                HttpServletRequest request = (HttpServletRequest) context.get(ActionContext.REQUEST);
                HttpServletResponse response = (HttpServletResponse) context.get(ActionContext.RESPONSE);

                Table table = null;
                PreparedStatement pstmt = null;
                ResultSet rs = null;
                Connection conn = null;
                String sql = "";
                try {
                        conn = context.getConnection("tx");
                        if (code != null) {
                                sql = "SELECT t.ENTITY AS ENTITY,t.EXT AS EXT FROM ENTITY_1 t WHERE ID=" + code;
                                pstmt = conn.prepareStatement(sql);
                                rs = pstmt.executeQuery();
                                if (rs != null) {
                                        if (rs.next()) {
                                                String imgUrlExt = rs.getString("EXT");
                                                Blob blob = rs.getBlob("ENTITY");
                                                InputStream ins = blob.getBinaryStream();
                                                // 输出到文件
                                                response.setContentType("text/html");
                                                OutputStream fout = response.getOutputStream();
                                                // 下面将BLOB数据写入文件
                                                byte[] b = new byte[1024];
                                                int len = 0;
                                                while ((len = ins.read(b)) != -1) {
                                                        fout.write(b, 0, len);
                                                }
                                                // 依次关闭
                                                fout.close();
                                                ins.close();
                                        }
                                }
                        }
                        return null;
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        try {
                                conn.close();
                        } catch (Exception e2) {
                                e2.printStackTrace();
                        }
                }
                return null;
        }


你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

发表于 2017-11-16 16:55:04 | 显示全部楼层
hua_love2011 发表于 2017-11-16 16:29
能访问到了,如果在浏览器直接访问地址,出来都是乱码。如果在界面中访问,图片也不显示。
如果生成图片存 ...

二进制 输出流写出图片的方法!你自己上网搜下吧!  把它当做一个文件写出去才可以!
以文件的形式写出去!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-16 17:02:12 | 显示全部楼层
本帖最后由 hua_love2011 于 2017-11-16 17:17 编辑
liangyongfei 发表于 2017-11-16 16:55
二进制 输出流写出图片的方法!你自己上网搜下吧!  把它当做一个文件写出去才可以!
以文件的形式写出去 ...

意思是我把文件写入到某个位置,然后再拿到存放这个图片的位置信息,并将路径返回到前台进行展示?是这意思吗?假设我要将程序打成app的话,我图片写入到那个位置比较合适呢?另外,这样也会占用人家手机存储空间的。

我按照你说的方式弄了,文件也写到E盘了,调试时,img的src路径也是指向那张图片的地址的。但是也不显示

你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

发表于 2017-11-16 17:14:44 | 显示全部楼层
hua_love2011 发表于 2017-11-16 17:02
意思是我把文件写入到某个位置,然后再拿到存放这个图片的位置信息,并将路径返回到前台进行展示?是这意 ...

不是啊!就是动态将图片。以文件输出流的形式,将文件写出去即可!
就是java对象,先把二进制转成文件,只要是以文件的形式将二进制数据写出去的!
img 标签的src设置了就能显示

你可以上网搜下  二进制数据如何   文件输出流写出去
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-16 17:39:39 | 显示全部楼层
本帖最后由 hua_love2011 于 2017-11-16 17:54 编辑
liangyongfei 发表于 2017-11-16 17:14
不是啊!就是动态将图片。以文件输出流的形式,将文件写出去即可!
就是java对象,先把二进制转成文件, ...

如果我在浏览器访问的话,会直接下载图片,但是在平台中调用,还是没效果
Blob blob = rs.getBlob("ENTITY");
InputStream ins = blob.getBinaryStream();
                                                
// 输出到文件
OutputStream fout = new FileOutputStream(file);
// 下面将BLOB数据写入文件
byte[] b = new byte[1024];
int len = 0;
while ((len = ins.read(b)) != -1) {
        fout.write(b, 0, len);
}

OutputStream fout = response.getOutputStream();

int num;
byte buf[] = new byte[1024];

while ((num = ins.read(buf)) != -1) {
        fout.write(buf, 0, num);
}

// 依次关闭
fout.close();
ins.close();
改成这种方法也不行。但是左上角会出现一个图片不显示的小图标。请问是不是不支持tif格式的图片呢:
                                                Blob blob = rs.getBlob("ENTITY");
                                                InputStream ins = blob.getBinaryStream();

                                                response.setContentType("image/jpeg");
                                                response.setHeader("Cache-control", "no-cache");
                                                
                                                ServletOutputStream fout = response.getOutputStream();

                                                int num;
                                                byte buf[] = new byte[1024];
                                                while ((num = ins.read(buf)) != -1) {
                                                        fout.write(buf, 0, num);
                                                }

                                                // 依次关闭
                                                fout.close();
                                                ins.close();

你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

发表于 2017-11-16 18:04:28 | 显示全部楼层
hua_love2011 发表于 2017-11-16 17:39
如果我在浏览器访问的话,会直接下载图片,但是在平台中调用,还是没效果
Blob blob = rs.getBlob("ENTITY ...

在浏览器访问的话,会直接下载图片,那你把这个URL复制一下!放在一个静态图片的src属性中可以显示吗?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-17 09:17:17 | 显示全部楼层
本帖最后由 hua_love2011 于 2017-11-17 09:25 编辑
liangyongfei 发表于 2017-11-16 18:04
在浏览器访问的话,会直接下载图片,那你把这个URL复制一下!放在一个静态图片的src属性中可以显示吗? ...

QQ图片20171117092318.png
不行,我就是把文件路径写死了也不行,可能还是那块有点问题。但是下载下来的是tif格式的图片,不知道是不是平台不支持这种格式的图片
var imgAddr = "http://127.0.0.1:8080/baas/tx/tx/getImgInfo?code=" + id;
this.imgUrl.set("E:/10010.png"); // 将后台获取到的图片流写入到image控件中

你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-17 09:36:47 | 显示全部楼层
liangyongfei 发表于 2017-11-16 18:04
在浏览器访问的话,会直接下载图片,那你把这个URL复制一下!放在一个静态图片的src属性中可以显示吗? ...

老师,我刚试了一下,如果把图片放到E盘下,路径写成E:/xxx.jpg也不行,但是如果放在项目下就可以,路径是UI/tx/img 。img是我在项目下创建的文件夹。我将路径改为./img/xxx.jpg就行了。如果这样的话,我在后台怎么将生成的文件放到UI/tx/img中呢?
你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

发表于 2017-11-17 10:43:34 | 显示全部楼层
hua_love2011 发表于 2017-11-17 09:36
老师,我刚试了一下,如果把图片放到E盘下,路径写成E:/xxx.jpg也不行,但是如果放在项目下就可以,路径 ...

img标签就是HTML 自带的标签而已!和wex5平台没关系!

首先 浏览器访问这个URL如果能正常下载!下载下来的文件,你用图片工具看下能否正常打开?? 保证图片下载下来的文件是正常的!!!

如果这个图片可以正常下载!那么把 浏览器访问的这个URL 直接赋值给  img标签 的src属性,就可以正常显示没问题的!(除非文件输出流下载的图片根本就不是可以正常打开的图片)
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

170

主题

838

帖子

2140

积分

金牌会员

Rank: 6Rank: 6

积分
2140
QQ
 楼主| 发表于 2017-11-17 11:05:21 | 显示全部楼层
liangyongfei 发表于 2017-11-17 10:43
img标签就是HTML 自带的标签而已!和wex5平台没关系!

首先 浏览器访问这个URL如果能正常下载!下载下来 ...

下载下来的图片是可以正常打开的,但是如果放到html文件中去显示也不行,百度了一下说要安装插件(alternatiffx-1_8_2)才行,那如果我做成app了,能将这个插件引用进去,客户不用在下载就能查看吗?
你不向前奔跑,没有人愿意停下来等你!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-9-27 12:07 , Processed in 0.071423 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表