JAVA 读取图片储存至本地

需求:serlvet经过处理通过报表工具返回一张报表图(柱状图 折线图)。

          现在需要把这个图存储到本地 以便随时查看

 // 构造URL
URL url = new URL(endStr);
 // 打开URL连接
URLConnection con = url.openConnection();
 // 得到URL的输入流
InputStream input = con.getInputStream();
// 设置数据缓冲
byte[] bs = new byte[1024 * 2];
// 读取到的数据长度
int len;
// 输出的文件流保存图片至本地
OutputStream os = new FileOutputStream(“D:\a.jpg”);
while ((len = input.read(bs)) != -1) {
os.write(bs, 0, len);
}
os.close();
input.close();

 后来 在开发过程中遇到这样一个问题。

根据需要配置了单点登录和ssl安全证书。这样在生成图片的时候会生成一张浏览不了的。

原因是。在生成图片的时候,每次都是从后台去访问地址的。由于过滤器的原因访问不到。所以对以上代码做了修改

URLConnection con = url.openConnection();//处理以http开头的地址
替换为

HttpsURLConnection con = (HttpsURLConnection) url.openConnection();//处理以https开头的地址

添加过滤器

package com.hjkj.listeners;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import edu.yale.its.tp.cas.client.filter.CASFilter;

public class MyCASFilter extends CASFilter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain fc) throws IOException, ServletException {
        String requestURI = ((HttpServletRequest)request).getRequestURI();
        String contextPath = ((HttpServletRequest)request).getContextPath();
        System.out.println(requestURI.toString());
        if (requestURI.indexOf("reportServlet") != -1) {
            fc.doFilter(request, response);
            return ;
        }
        try {
            super.doFilter(request, response, fc);
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/chen-lhx/p/6019322.html