Android中利用apache的httpclient实现文件的上传

之前利用java代码实现了文件的上传,见java模拟form表单提交文件到服务器,这里在Android中实现了上传文件到服务器,利用的是apache的httpclient包,下载地址:http://hc.apache.org/downloads.cgi
具体实现代码如下:

 

 

public static int sendFileToServer(String url, File file) { 
    int status = 0;     
    try {      
        PostMethod filePost = new PostMethod(url );
        Part[] parts = { new FilePart("datefile", file, null, "UTF-8"),     
                new StringPart("uuid", "12123123213", "UTF-8"),      
                new StringPart("username", "test", "UTF-8"),       
                new StringPart("types", "test", "UTF-8") };      
        MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, filePost.getParams()); 
        filePost.setRequestEntity(multipartRequestEntity);     
        HttpClient clients = new HttpClient(); 
        status = clients.executeMethod(filePost); 
        BufferedReader rd = new BufferedReader(new InputStreamReader(filePost.getResponseBodyAsStream(), "UTF-8"));     
        StringBuffer stringBuffer = new StringBuffer();      
        String line;      
        while ((line = rd.readLine()) != null) {      
            stringBuffer.append(line);      
        }      
        rd.close();      
        // 这里需要解析json格式的字符串      
        Log.i("cat", stringBuffer.toString());      
    } catch (Exception e) {      
        return 500;      
    }      
    return status;      
}

这里重点说一下Part[]这个参数:

 

 

 

Part[] parts = { new FilePart("datefile", file, null, "UTF-8"),     
                new StringPart("uuid", "12123123213", "UTF-8"),      
                new StringPart("username", "test", "UTF-8"),       
                new StringPart("types", "test", "UTF-8") };

数组中可以存放FilePart和StringPart不同类型的数据,FilePart就是需要上传的File对应的参数,StringPart是发送post请求的时候,其他需要传递的参数。
其实在实际开发中的需求一般会是利用一个上传队列来维护上传任务,这里可以利用java的线程池是实现:

 

 

ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit(new Runnable() { 
            @Override     
            public void run() {      
                // TODO Auto-generated method stub      
                sendFileToServer("", new File(Environment.getExternalStorageDirectory().toString() + File.separator + "aa.zip"));      
            }      
        });      
        executorService.submit(new Runnable() { 
            @Override     
            public void run() {      
                // TODO Auto-generated method stub      
                sendFileToServer("", new File(Environment.getExternalStorageDirectory().toString() + File.separator + "aa.zip"));      
            }      
        });      
        executorService.shutdown();

这样就实现了队列线程上传文件,注意这不是多线程上传。
源码见:http://bigcateasymorse.googlecode.com/svn/trunk/androiduploadfiletoserver/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值