android httpclient 上传多张图片,Android网络编程之使用HttpClient批量上传文件(一)...

我曾在《Android网络编程之使用HTTP访问网络资源》一文中介绍过HttpCient的使用,这里就不在累述了,感兴趣的朋友可以去看一下。在这里主要介绍如何通过HttpClie

package com.jph.ufh.activity;

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import com.jph.ufh.R;

import com.jph.ufh.service.UploadService;

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.Toast;

/**

* 通过httpClient批量上传文件

* @author jph

* Date:2014.10.09

*/

public class MainActivity extends Activity {

private ArrayListfiles;

private Mapparams;

Handler mHandler=new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

switch (msg.what) {

case UploadService.UPLOAD_SUCCESS:

Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_LONG).show();

break;

}

super.handleMessage(msg);

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

files=new ArrayList();

params=new HashMap();

}

public void upload(View v) {

files.clear();

params.clear();

File file=new File(Environment.getExternalStorageDirectory(),"kaola.jpg");

File file2=new File(Environment.getExternalStorageDirectory(),"test.docx");

File file3=new File(Environment.getExternalStorageDirectory(),"test.jpg");

files.add(file);

files.add(file2);

files.add(file3);

StringBuffer sbFileTypes=new StringBuffer();

for (File tempFile:files) {

String fileName=tempFile.getName();

sbFileTypes.append(getFileType(fileName));

}

params.put("fileTypes",sbFileTypes.toString());

params.put("method", "upload");

UploadService uploadService=new UploadService(mHandler);

uploadService.uploadFileToServer(params, files);

}

/**

* 获取文件的类型

* @param fileName :文件名

* @return 文件类型

*/

private String getFileType(String fileName) {

// TODO Auto-generated method stub

return fileName.substring(fileName.lastIndexOf("."), fileName.length());

}

}

UploadService.java

package com.jph.ufh.service;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Map;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.mime.HttpMultipartMode;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Handler;

/**

* 采用HttpClient上传文件,支持多文件上传

* @author jph

* Date:2014.10.09

*/

public class UploadService {

private static String url=":8080/ServerForUpload/ServletForUpload";

//private static String url=":8080/ServerForUpload/ServletForUpload";

public static final int UPLOAD_SUCCESS=0x123;

public static final int UPLOAD_FAIL=0x124;

private Handler handler;

public UploadService(Handler handler) {

// TODO Auto-generated constructor stub

this.handler=handler;

}

/**

* @param params 请求参数,包括请求的的方法参数method如:“upload”,

* 请求上传的文件类型fileTypes如:“.jpg.png.docx”

* @param files 要上传的文件集合

*/

public void uploadFileToServer(final Map params, final ArrayListfiles) {

// TODO Auto-generated method stub

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

try {

if (uploadFiles(url,params,files)) {

handler.sendEmptyMessage(UPLOAD_SUCCESS);//通知主线程数据发送成功

}else {

//将数据发送给服务器失败

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

}

/**

* @param url servlet的地址

* @param params 要传递的参数

* @param files 要上传的文件

* @return true if upload success else false

* @throws ClientProtocolException

* @throws IOException

*/

private boolean uploadFiles(String url,Mapparams,ArrayListfiles) throws ClientProtocolException, IOException {

HttpClient client=new DefaultHttpClient();// 开启一个客户端 HTTP 请求

HttpPost post = new HttpPost(url);//创建 HTTP POST 请求

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

//builder.setCharset(Charset.forName("uft-8"));//设置请求的编码格式

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式

int count=0;

for (File file:files) {

//FileBody fileBody = new FileBody(file);//把文件转换成流对象FileBody

//builder.addPart("file"+count, fileBody);

builder.addBinaryBody("file"+count, file);

count++;

}

builder.addTextBody("method", params.get("method"));//设置请求参数

builder.addTextBody("fileTypes", params.get("fileTypes"));//设置请求参数

HttpEntity entity = builder.build();// 生成 HTTP POST 实体

post.setEntity(entity);//设置请求参数

HttpResponse response = client.execute(post);// 发起请求 并返回请求的响应

if (response.getStatusLine().getStatusCode()==200) {

return true;

}

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值