美文网首页
java生成word请求远程图片或者本地图片,个别图片不全或者图

java生成word请求远程图片或者本地图片,个别图片不全或者图

作者: 奔跑吧老狗 | 来源:发表于2018-05-08 10:36 被阅读0次

    生成的工具用的是freemarker模板,利用word转换xml改后缀名生成ftl 模式。

    问题:个别图片显示不全或者显示失败

    图片显示失败 图片显示不全

    出现问题的代码:

    InputStream in=null;

    if(flag) {//获取远程图片

    //new一个URL对象   

    URL url = new URL(path);   

    //打开链接   

    HttpURLConnection conn = (HttpURLConnection)url.openConnection();   

    //设置请求方式为"GET"   

    conn.setRequestMethod("GET");   

    //超时响应时间为5秒   

    // conn.setConnectTimeout(5 * 1000);   

    //通过输入流获取图片数据   

    in = conn.getInputStream();

    }else {//获取本地图片

    File file = new File(path);

    in = new FileInputStream(file);

    }

    byte[] data = null;

    data = new byte[in.available()]; //=======问题:InputStream 的 available() 返回的值是该InputStream 在不被阻塞的情况下,一次可以读取到

    // 的数据长度。但网络情况总是不定的,经常阻塞。

    in.read(data);

    in.close();

    BASE64Encoder encoder = new BASE64Encoder();

    String base64 = encoder.encode(data);

    解决办法:循环读取 InputStream 中的数据。

            ByteArrayOutputStream data = new ByteArrayOutputStream();

            URL url = new URL(path);

            byte[] by = new byte[1024];

            // 创建链接

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setRequestMethod("GET");

            conn.setConnectTimeout(5 * 1000);

            InputStream is = conn.getInputStream();

            // 将内容读取内存中

            int len = -1;

            while ((len = is.read(by)) != -1) {

                data.write(by, 0, len);

            }

            // 关闭流

            is.close();

            BASE64Encoder encoder = new BASE64Encoder();

            String base64 = encoder.encode(data.toByteArray());

    相关文章

      网友评论

          本文标题:java生成word请求远程图片或者本地图片,个别图片不全或者图

          本文链接:https://www.haomeiwen.com/subject/rysirftx.html