天天看点

http/https下载文件

//https下载

fileUrl文件路径

fileLocal本地路径

public static void downloadFile(String fileUrl, String fileLocal, HttpServletResponse resp){
        HttpsURLConnection urlCon = null;
        try {
            SSLContext sslcontext = SSLContext.getInstance("SSL", "SunJSSE");
            sslcontext.init(null, new TrustManager[]{new com.lss.X509TrustUtiil()}, new java.security.SecureRandom());

            resp.setHeader("content-type", "application/octet-stream");
            resp.setContentType("application/octet-stream");
            resp.setHeader("Content-Disposition", "attachment;filename=" + "111.png");

            URL url = new URL(fileUrl);
            HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
                @Override
                public boolean verify(String s, SSLSession sslsession) {
                    System.out.println("WARNING: Hostname is not matched for cert.");
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
            urlCon = (HttpsURLConnection) url.openConnection();
            urlCon.setConnectTimeout(6000);
            urlCon.setReadTimeout(6000);
            int code = urlCon.getResponseCode();
            if (code != HttpURLConnection.HTTP_OK) {
                throw new Exception("文件读取失败");
            }
        } catch (Exception e) {
            
        }
        // 读文件流
//        DataInputStream in = new DataInputStream(urlCon.getInputStream());
//        DataOutputStream out = new DataOutputStream(new FileOutputStream(fileLocal));
//        byte[] buffer = new byte[2048];
//        int count = 0;
//        while ((count = in.read(buffer)) > 0) {
//            out.write(buffer, 0, count);
//        }
//        out.close();
//        in.close();
        //buff设置为1,避免https下载图片失桢
        byte[] buff = new byte[1];
        try(OutputStream os = resp.getOutputStream(); BufferedInputStream bis = new BufferedInputStream(urlCon.getInputStream())){
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
        } catch (Exception e) {
            
        }

    }
           

ssl工具

public class X509TrustUtiil implements X509TrustManager {

    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub

    }

    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        // TODO Auto-generated method stub
        return null;
    }

}
           

http下载文件

urlPath 文件路径

public static void downLoad(HttpServletResponse resp, String urlPath) {
        int lastIndex = urlPath.lastIndexOf("\\");
        lastIndex = lastIndex==-1?urlPath.lastIndexOf("/"):lastIndex;
        String fileName =urlPath.substring(lastIndex-1);
        resp.setHeader("content-type", "application/octet-stream");
        resp.setContentType("application/octet-stream");
        resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        URLConnection conn;
        try {
            URL url = new URL(urlPath);
            conn = url.openConnection();
        } catch (Exception e) {
            
        }
        byte[] buff = new byte[1024];
        try(OutputStream os = resp.getOutputStream();BufferedInputStream bis = new BufferedInputStream(conn.getInputStream())){
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
        } catch (Exception e) {
          
        }
    }