• HttpClient实现HTTP文件通用下载类


    Java代码  
      1 import java.io.File;  
      2 import java.io.FileOutputStream;  
      3 import java.io.InputStream;  
      4   
      5 import org.apache.http.Header;  
      6 import org.apache.http.HeaderElement;  
      7 import org.apache.http.HttpEntity;  
      8 import org.apache.http.HttpResponse;  
      9 import org.apache.http.NameValuePair;  
     10 import org.apache.http.client.HttpClient;  
     11 import org.apache.http.client.methods.HttpGet;  
     12 import org.apache.http.impl.client.DefaultHttpClient;  
     13   
     14 /** 
     15  * 说明 
     16  * 利用httpclient下载文件 
     17  * maven依赖 
     18  * <dependency> 
     19 *           <groupId>org.apache.httpcomponents</groupId> 
     20 *           <artifactId>httpclient</artifactId> 
     21 *           <version>4.0.1</version> 
     22 *       </dependency> 
     23 *  可下载http文件、图片、压缩文件 
     24 *  bug:获取response header中Content-Disposition中filename中文乱码问题 
     25  * @author tanjundong 
     26  * 
     27  */  
     28 public class HttpDownload {  
     29   
     30     public static final int cache = 10 * 1024;  
     31     public static final boolean isWindows;  
     32     public static final String splash;  
     33     public static final String root;  
     34     static {  
     35         if (System.getProperty("os.name") != null && System.getProperty("os.name").toLowerCase().contains("windows")) {  
     36             isWindows = true;  
     37             splash = "\";  
     38             root="D:";  
     39         } else {  
     40             isWindows = false;  
     41             splash = "/";  
     42             root="/search";  
     43         }  
     44     }  
     45       
     46     /** 
     47      * 根据url下载文件,文件名从response header头中获取 
     48      * @param url 
     49      * @return 
     50      */  
     51     public static String download(String url) {  
     52         return download(url, null);  
     53     }  
     54   
     55     /** 
     56      * 根据url下载文件,保存到filepath中 
     57      * @param url 
     58      * @param filepath 
     59      * @return 
     60      */  
     61     public static String download(String url, String filepath) {  
     62         try {  
     63             HttpClient client = new DefaultHttpClient();  
     64             HttpGet httpget = new HttpGet(url);  
     65             HttpResponse response = client.execute(httpget);  
     66   
     67             HttpEntity entity = response.getEntity();  
     68             InputStream is = entity.getContent();  
     69             if (filepath == null)  
     70                 filepath = getFilePath(response);  
     71             File file = new File(filepath);  
     72             file.getParentFile().mkdirs();  
     73             FileOutputStream fileout = new FileOutputStream(file);  
     74             /** 
     75              * 根据实际运行效果 设置缓冲区大小 
     76              */  
     77             byte[] buffer=new byte[cache];  
     78             int ch = 0;  
     79             while ((ch = is.read(buffer)) != -1) {  
     80                 fileout.write(buffer,0,ch);  
     81             }  
     82             is.close();  
     83             fileout.flush();  
     84             fileout.close();  
     85   
     86         } catch (Exception e) {  
     87             e.printStackTrace();  
     88         }  
     89         return null;  
     90     }  
     91     /** 
     92      * 获取response要下载的文件的默认路径 
     93      * @param response 
     94      * @return 
     95      */  
     96     public static String getFilePath(HttpResponse response) {  
     97         String filepath = root + splash;  
     98         String filename = getFileName(response);  
     99   
    100         if (filename != null) {  
    101             filepath += filename;  
    102         } else {  
    103             filepath += getRandomFileName();  
    104         }  
    105         return filepath;  
    106     }  
    107     /** 
    108      * 获取response header中Content-Disposition中的filename值 
    109      * @param response 
    110      * @return 
    111      */  
    112     public static String getFileName(HttpResponse response) {  
    113         Header contentHeader = response.getFirstHeader("Content-Disposition");  
    114         String filename = null;  
    115         if (contentHeader != null) {  
    116             HeaderElement[] values = contentHeader.getElements();  
    117             if (values.length == 1) {  
    118                 NameValuePair param = values[0].getParameterByName("filename");  
    119                 if (param != null) {  
    120                     try {  
    121                         //filename = new String(param.getValue().toString().getBytes(), "utf-8");  
    122                         //filename=URLDecoder.decode(param.getValue(),"utf-8");  
    123                         filename = param.getValue();  
    124                     } catch (Exception e) {  
    125                         e.printStackTrace();  
    126                     }  
    127                 }  
    128             }  
    129         }  
    130         return filename;  
    131     }  
    132     /** 
    133      * 获取随机文件名 
    134      * @return 
    135      */  
    136     public static String getRandomFileName() {  
    137         return String.valueOf(System.currentTimeMillis());  
    138     }  
    139     public static void outHeaders(HttpResponse response) {  
    140         Header[] headers = response.getAllHeaders();  
    141         for (int i = 0; i < headers.length; i++) {  
    142             System.out.println(headers[i]);  
    143         }  
    144     }  
    145     public static void main(String[] args) {  
    146 //      String url = "http://bbs.btwuji.com/job.php?action=download&pid=tpc&tid=320678&aid=216617";  
    147         String url="http://www.dy1000.com/img/20120701/1999311085_150_200.JPG";  
    148 //      String filepath = "D:\test\a.torrent";  
    149         String filepath = "D:\test\a.jpg";  
    150         HttpDownload.download(url, filepath);  
    151     }  
    152 }  


    参考资料: 
    http://eyecm.com/httpclient4-1-tutorial-official-examples-to-explain-httpclient4-1-usage/ 
    http://eyecm.com/httpclient-download/

  • 相关阅读:
    聊聊自动化的打开方式
    浅谈如何提高自动化测试的稳定性和可维护性 (pytest&allure)
    Jmeter做压力测试的心得
    为什么测试人员必须掌握Linux?
    数据结构与算法系列 目录
    高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备
    Fastdfs文件系统扩容
    Linux下FastDFS分布式存储-总结及部署记录
    How to setup a Alpine Linux mirror
    修改内核参数开启转发
  • 原文地址:https://www.cnblogs.com/ygjlch/p/6054078.html
Copyright © 2020-2023  润新知