• 通过httpclient3实现文件下载以及获取文件下载名称


    package httpclient3test;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.apache.commons.httpclient.Header;
    import org.apache.commons.httpclient.HeaderElement;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.NameValuePair;
    import org.apache.commons.httpclient.methods.GetMethod;
    
    /**
     * @author yan
     * @date 2018-3-22 13:39:22
     * @version V1.0
     * @desc
     */
    public class Httpclient3test {
    
        public static void main(String[] args) throws IOException {
            HttpClient httpClient = new HttpClient();
            GetMethod getMethod = new GetMethod("http://android.myapp.com/android/down.jsp?appid=48157&lmid=2031&g_f=-1&actiondetail=0&softname=&downtype=1&enginekeywd=&topicid=-1&pkgid=-1");
    
            int statusCode = httpClient.executeMethod(getMethod);
            System.out.println(statusCode);
    
            //获取response的返回头信息
            Header contentHead = getMethod.getResponseHeader("Content-Disposition");
            
            HeaderElement[] elements = contentHead.getElements();
            String filename = null;
    
            for (HeaderElement el : elements) {
                //遍历,获取filename
                NameValuePair pair = el.getParameterByName("filename");
                filename = pair.getValue();
    
                if (null != filename) {
                    break;
                }
            }
    
            System.out.println("filename:" + filename);
    
            InputStream is = getMethod.getResponseBodyAsStream();
            
            inputStream2File(is, new File("G:\tmp\"+filename));
            
            getMethod.releaseConnection();
    
        }
    
        public static void inputStream2File(InputStream is, File file) {
            OutputStream os = null;
    
            try {
                os = new FileOutputStream(file);
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
                    os.write(buffer, 0, bytesRead);
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
    
                try {
                    if (null != os) {
                        os.close();
                    }
                } catch (IOException ex) {
                    Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    if (null != is) {
                        try {
                            is.close();
                        } catch (IOException ex) {
                            Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }
            }
        }
    
    }

    依赖jar包

    commons-codec-1.2.jar

    commons-httpclient-3.1.jar

    commons-logging-1.2.jar

  • 相关阅读:
    Node + js实现大文件分片上传基本原理及实践(一)
    渐进式web应用开发---promise式数据库(五)
    渐进式web应用开发---使用indexedDB实现ajax本地数据存储(四)
    渐进式web应用开发--拥抱离线优先(三)
    js实现使用文件流下载csv文件
    客户端持久化数据库---indexedDB使用
    渐进式web应用开发---service worker (二)
    渐进式web应用开发---service worker 原理及介绍(一)
    浅谈NodeJS多进程服务架构基本原理
    Electron为文件浏览器创建图标(三)
  • 原文地址:https://www.cnblogs.com/yshyee/p/8623295.html
Copyright © 2020-2023  润新知