需要导入httpmime的jar包
@SuppressWarnings("deprecation")
public final class UpLoadImageByPut {
private Handler handler;
private static UpLoadImageByPut instance;
public static final int UPLOAD_SUC = 8001;
public static final int UPLOAD_FAIL = 8002;
//此处使用单例模式,传入一个Handler,请求结束后通过Handler来告诉UI线程
public static UpLoadImageByPut getInstance(Handler handler) {
if (instance == null) {
if (handler != null) {
instance = new UpLoadImageByPut(handler);
} else {
throw new IllegalArgumentException("you should put a handler");
}
}
return instance;
}
//构造函数私有化
private UpLoadImageByPut(Handler handler) {
this.handler = handler;
};
//实际执行上传的方法
private String doMultiPut(String url, List<NameValuePair> params) {
String response = "fail to upload image...";
HttpClient httpClient = new DefaultHttpClient();
HttpPut httpPut = new HttpPut(url);
try {
MultipartEntity entity = new MultipartEntity();
for (int i = 0; i < params.size(); i++) {
String name = params.get(i).getName();//这里的每一个name对应于每一个key,修改即可
String value = params.get(i).getValue();
if (!TextUtils.isEmpty(value)) {
if (name.equals("ticketId")) {
entity.addPart("ticketId", new StringBody(value,
Charset.forName("UTF-8")));
} else if (name.equals("remark")) {
entity.addPart("remark", new StringBody(value));
} else if (name.equals("image")) {
//这里是重点,根据传入的图片路径构造出FIle,然后add进去即可
File f = new File(value);
FileBody fileBody = new FileBody(f);
entity.addPart("image", fileBody);
}
}
}
httpPut.setEntity(entity);
HttpResponse res = httpClient.execute(httpPut);
Message msg = new Message();
Gson gson = new Gson();
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
response = EntityUtils.toString(res.getEntity(), HTTP.UTF_8);
ResponseData data = gson.fromJson(response, ResponseData.class);
msg.what = UPLOAD_SUC;
msg.obj = data.getMessage();
handler.sendMessage(msg);
} else {
response = EntityUtils.toString(res.getEntity(), HTTP.UTF_8);
ResponseData data = gson.fromJson(response, ResponseData.class);
msg.what = UPLOAD_FAIL;
msg.obj = data.getMessage();
handler.sendMessage(msg);
}
// // create response handler
// ResponseHandler<String> handler = new BasicResponseHandler();
//
// // execute and get response
// response = new String(httpClient.execute(httpPut, handler)
// .getBytes(), HTTP.UTF_8);
} catch (Exception e) {
handler.sendEmptyMessage(400);
e.printStackTrace();
}
return response;
}
//提供给外部调用的方法,这里使用一个自定义的实体ResolveTicket来传参数
public String upLoadImage(String path, ResolveTicket ticket) {
String result = "fail to request...";
if (ticket != null) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("ticketId", ticket.getTicketId()));//在这里加入参数,参数以键值对的形式出现,文件或图片值就传入路径
params.add(new BasicNameValuePair("remark", ticket.getRemark()));
String images[] = ticket.getImages();
for (String fileDir : images) {
params.add(new BasicNameValuePair("image", fileDir));
}
result = doMultiPut(path, params);//第三个参数,暂时传入图片的路径
}
return result;
}
}
//ResolveTicket实体的定义
public class ResolveTicket {
private String ticketId;//参数一:id
private String remark;//参数二:标记
private String[] images;
public String getTicketId() {
return ticketId;
}
public void setTicketId(String ticketId) {
this.ticketId = ticketId;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String[] getImages() {
return images;
}
public void setImages(String[] images) {
this.images = images;
}
}