需要導入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;
}
}