首页 > Web开发 > 详细

HttpClient使用之下载远程服务器中的文件

时间:2017-02-17 13:02:05      阅读:329      评论:0      收藏:0      [点我收藏+]

参考文献:

http://bbs.csdn.net/topics/390952011

http://blog.csdn.net/ljj_9/article/details/53306468

1.下载地址

http://hc.apache.org/downloads.cgi

Apache-》Projects-》HttpComponents

技术分享

2.DownloadServlet

 1 package com.servlet;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10 import java.net.URLDecoder;
11 import java.net.URLEncoder;
12 
13 import javax.servlet.ServletException;
14 import javax.servlet.http.HttpServlet;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17 
18 
19 
20 public class DownloadServlet extends HttpServlet {
21 
22     private static final long serialVersionUID = 1L;
23     
24     public void doGet(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26         String filename = request.getParameter("id");
27         String fileUrl = request.getServletContext().getRealPath("").replace("\\", "/"); 
28         fileUrl = fileUrl + "/files/document/" + filename;
29         System.out.println("fileUrl:"+fileUrl);
30         String rname = new String(filename.getBytes("utf-8"));
31         System.out.println("begin:"+rname);
32         rname = URLEncoder.encode(rname);
33         System.out.println("end:"+rname);
34         response.addHeader("Content-Disposition", "attachment;filename="+rname);
35         response.setContentType("application/octet-stream");
36         
37         File file = new File(fileUrl);
38         InputStream is = new BufferedInputStream(new FileInputStream(file));
39         byte[] buffer = new byte[is.available()];
40         is.read(buffer);
41         is.close();
42          
43         OutputStream os = new BufferedOutputStream(response.getOutputStream());
44         os.write(buffer);
45         os.flush();
46         os.close();
47     }
48     
49     
50     public void doPost(HttpServletRequest request, HttpServletResponse response)
51             throws ServletException, IOException {
52         
53         
54     }
55     
56     
57     }
58     
59   

3.ClientA.java

 

package com.tool;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class ClientA {

    /**
     * 
     * @param args
     */
    
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        ClientA client = new ClientA();
        client.service();
    }

    public void service() {
        // TODO 自动生成的方法存根
        
        String url = "http://此处填写ip或网址/download.do";
        
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(url);
         
        try {
             
            HttpResponse response = client.execute(get);
            InputStream is = response.getEntity().getContent();
             
            String localfile = "D://a.zip";
            File file = new File(localfile);
            if(!file.exists()){
                file.createNewFile();
            }
             
            OutputStream os = new FileOutputStream(file);
             
            int read = 0;
            byte[] temp = new byte[1024*1024];
             
            while((read=is.read(temp))>0){
                byte[] bytes = new byte[read];
                System.arraycopy(temp, 0, bytes, 0, read);
                os.write(bytes);
            }
            os.flush();
         
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

4.注意服务器的编码方式和客户端的区别

统一为utf-8

HttpClient使用之下载远程服务器中的文件

原文:http://www.cnblogs.com/landiljy/p/6408382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!