zoukankan      html  css  js  c++  java
  • 把网上图片下载到本地的java工具类

    package com.swift;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class DownloadPicUtil {
    
        public static final int DEF_CONN_TIMEOUT = 30000;
        public static final int DEF_READ_TIMEOUT = 30000;
        public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
        
        public static void downloadPic(String strUrl,String savePath) throws Exception {
            HttpURLConnection conn = null;
                URL url = new URL(strUrl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setRequestProperty("User-agent", userAgent);
                conn.setUseCaches(false);
                conn.setConnectTimeout(DEF_CONN_TIMEOUT);
                conn.setReadTimeout(DEF_READ_TIMEOUT);
                conn.setInstanceFollowRedirects(false);
                conn.connect();
                InputStream is = conn.getInputStream();//连接得到输入流内容
                File file=new File(savePath);
                if(!file.exists()) {//保存文件夹不存在则建立
                    file.mkdirs();
                }
                FileOutputStream fos=new FileOutputStream(new File(savePath,strUrl.substring(strUrl.lastIndexOf("/")+1)));//获取网址中的图片名
                int intRead = 0;
                byte[] buf=new byte[1024*2];//生成2K 大小的容器用于接收图片字节流
                while ((intRead = is.read(buf)) != -1) {
                    fos.write(buf,0,intRead);//文件输出流到指定路径文件
                    fos.flush();
                }
                fos.close();//关闭输出
                if (conn != null) {
                    conn.disconnect();//关闭连接
                }
        }
    }

     上边这个不好看懂,重写了一个

    package com.swift.servlet;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import sun.misc.BASE64Encoder;
    
    /**
     * Servlet implementation class DownServletYangyan
     */
    public class DownServletYangyan extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            String path=this.getServletContext().getRealPath("download/美女.jpg");//这个是通过项目中的地址得到实际存放在地址
            String mime=this.getServletContext().getMimeType(path);//这个只是知道一下是什么类型,没用
            String filename="美女.jpg";//这个是下载时显示的下载名
            String agent=request.getHeader("User-Agent");
            if(agent.contains("MSIE")) {
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            }else if(agent.contains("firefox")) {
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            }else {
                filename = URLEncoder.encode(filename, "utf-8");
            }
            
            response.setHeader("Content-Disposition", "attachment;filename="+filename);//告诉浏览器用附件法打开
            FileInputStream fis=new FileInputStream(path);
            ServletOutputStream out=response.getOutputStream();//servlet的响应输出流送回
            byte[] buf=new byte[1024];
            int len;
            while((len=fis.read(buf))!=-1) {
                out.write(buf, 0, len);
            }
            fis.close();
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    centos8.2安装Rabbitmq-3.8.12
    绝对好文C#调用C++DLL传递结构体数组的终极解决方案
    c++到c#数据类型的转换
    WPF中timer的使用
    接收Dialog的值
    WPF子界面向父界面传递带参数的委托
    2015上海居住证和积分办理流程
    Discuz! X3.2重置管理员账号
    winServer2008下安装SqlServer2008数据库
    jodd cache实现缓存超时
  • 原文地址:https://www.cnblogs.com/qingyundian/p/7624532.html
Copyright © 2011-2022 走看看