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

QQ登录

只需一步,快速开始

查看: 2268|回复: 7

[处理中3] fileApi打开文件异常

[复制链接]

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
发表于 2016-9-1 11:42:35 | 显示全部楼层 |阅读模式
在电脑浏览器上是能够在线浏览pdf文件的,但是在苹果手机中在新开的窗口中是没有内容的。
前台代码:
                var url = "http://192.168.31.190:8080/baas/base/download";
                var name = "1";
                fileApi.browse(url, name).done(function(){
                    //alert("成功打开");
                }).fail(function(){
                    alert("打开出错");
                });

后台代码:
        @RequestMapping("download")
        @ResponseBody
        public void downLoad(HttpServletResponse response) throws Exception {
        try {
                        String filePath = "d:/1.pdf";
                        File f = new File(filePath);
                        if (!f.exists()) {
                                System.out.println("error");;
                            response.sendError(404, "File not found!");
                            return;
                        }
                        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
                        byte[] buf = new byte[1024];
                        int len = 0;

                        response.reset(); // 非常重要

                    URL u = new URL("file:///" + filePath);
                    response.setContentType(u.openConnection().getContentType());
                    System.out.println(u.openConnection().getContentType());
                    response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
                    // 文件名应该编码成UTF-8

                        OutputStream out = response.getOutputStream();
                        while ((len = br.read(buf)) > 0)
                            out.write(buf, 0, len);
                        br.close();
                        out.close();
                        System.out.println("end");
                } catch (Exception e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                }
    }

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
 楼主| 发表于 2016-9-1 11:46:58 | 显示全部楼层
换另外一种url地址,也是同样现象,浏览器可以直接浏览,但app中什么都不显示
                var url = "http://192.168.31.190:8080/baas/resource/1.pdf";
                var name = "1";
                        
                fileApi.browse(url, name).done(function(){
                    //alert("成功打开");
                }).fail(function(){
                    alert("打开出错");
                });
回复 支持 1 反对 0

使用道具 举报

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
 楼主| 发表于 2016-9-1 12:03:46 | 显示全部楼层
把fileApi中的一行代码直接复制出来调用,就可以看到了,为什么?这只能临时权宜

                var url = "http://192.168.31.190:8080/baas/resource/1.pdf";
                var name = "1";
               
                window.open(url, '_blank', 'toolbarposition=top,location=no,enableViewportScale=yes');
回复 支持 反对

使用道具 举报

发表于 2016-9-1 13:57:11 | 显示全部楼层
bhjsj 发表于 2016-9-1 12:03
把fileApi中的一行代码直接复制出来调用,就可以看到了,为什么?这只能临时权宜

                var url = "http://192. ...

请问插件是否打包在APP 中了!APP中必须使用corodva插件才可以打开的!http://docs.wex5.com/open-file/
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
 楼主| 发表于 2016-9-2 10:34:13 | 显示全部楼层
就是fileApi这个插件吗?如果不是,要选哪一个插件?
回复 支持 反对

使用道具 举报

发表于 2016-9-2 11:18:20 | 显示全部楼层
bhjsj 发表于 2016-9-2 10:34
就是fileApi这个插件吗?如果不是,要选哪一个插件?

ch.ti8m.documenthandler  
可以看下就是fileApi 源码中使用到了那些插件!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
 楼主| 发表于 2016-9-6 09:36:36 | 显示全部楼层
朝着胜利又进了一步。
目前的情况是,如果给的url地址是一个文件的直接路径,比如/resource/1.pdf,在android与ios上都可以打开浏览。
但把url写成一个spring mvc的路径时,在代码以流的方式输出时,有两种情况:
在浏览器中是直接下载了这个文件,可以打开。
在ios上,是全屏弹出新窗口,只显示下载了一个文件,注明了文件大小。
在android上,底部显示正在下载,然后就没反应了。
代码大概代码如下:
response.reset(); // 非常重要
                        //response.setContentType("multipart/form-data");
                        //response.setContentType("application/vnd.ms-excel;charset=utf-8");
                        response.setContentType("application/octet-stream");
                       
                    response.setHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("utf-8"),"iso-8859-1"));
                    // 文件名应该编码成UTF-8

                        OutputStream out = response.getOutputStream();
                        int size = 0;
                        while ((len = br.read(buf)) > 0){
                                out.write(buf, 0, len);
                                size += len;
                        }
                        if(size == 0){
                                //没有收到文件流
                               
                        }
                        //response.addHeader("Content-Length", "" + size);
                        br.close();
                        out.close();

请过来人指点一下迷津。
回复 支持 反对

使用道具 举报

25

主题

55

帖子

131

积分

初级会员

Rank: 2

积分
131
QQ
 楼主| 发表于 2016-9-6 09:38:44 | 显示全部楼层
之前也试过把attchmet写成inline的,也没效果.
response.setHeader("Content-Disposition", "inline; filename=" + new String(filename.getBytes("utf-8"),"iso-8859-1"));
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 14:35 , Processed in 0.132841 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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