zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    C#简单的工厂模式
    Microsoft.XMLHttp的属性和方法的简介及使用
    Google Earth 2007中文修订版
    偷懒秘笈之一键生成 Ajax Control Toolkit 标记 (转)
    C#获取硬盘序列号
    Google和百度、雅虎的站内搜索代码
    Visual Studio 2005 Team Suite 180 天试用版
    几种 Dotnet ORM 库的比较
    Windows Server 2003 SP2 0918 Personal 精简版
    通用水晶报表绑定类[原]
  • 原文地址:https://www.cnblogs.com/yshyee/p/8623295.html
Copyright © 2011-2022 走看看