多文件带进度条上传UploadUtilsAsync.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.ics.aop.tool;
  2. import java.io.File;
  3. import java.nio.charset.Charset;
  4. import java.util.List;
  5. import org.apache.http.HttpEntity;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.HttpStatus;
  8. import org.apache.http.HttpVersion;
  9. import org.apache.http.client.ClientProtocolException;
  10. import org.apache.http.client.HttpClient;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.conn.ConnectTimeoutException;
  13. import org.apache.http.entity.mime.HttpMultipartMode;
  14. import org.apache.http.entity.mime.MultipartEntityBuilder;
  15. import org.apache.http.impl.client.DefaultHttpClient;
  16. import org.apache.http.params.CoreConnectionPNames;
  17. import org.apache.http.params.CoreProtocolPNames;
  18. import org.apache.http.protocol.HTTP;
  19. import android.app.ProgressDialog;
  20. import android.content.Context;
  21. import android.os.AsyncTask;
  22. import android.util.Log;
  23. import android.widget.Toast;
  24. import com.ics.aop.tool.ProgressOutHttpEntity.ProgressListener;
  25. /**
  26. * 异步AsyncTask+HttpClient上传文件,支持多文件上传,并显示上传进度
  27. * @author JPH
  28. * Date:2014.10.09
  29. * last modified 2014.11.03
  30. */
  31. public class UploadUtilsAsync extends AsyncTask<String, Integer, Boolean>{
  32. /**服务器路径**/
  33. private String url;
  34. /**上传的参数**/
  35. /**要上传的文件**/
  36. private List<File>files;
  37. private long totalSize;
  38. private Context context;
  39. private ProgressDialog progressDialog;
  40. public UploadUtilsAsync(Context context,String url, List<File>files) {
  41. this.context=context;
  42. this.url=url;
  43. this.files=files;
  44. }
  45. @Override
  46. protected void onPreExecute() {//执行前的初始化
  47. // TODO Auto-generated method stub
  48. progressDialog=new ProgressDialog(context);
  49. progressDialog.setTitle("请稍等...");
  50. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  51. progressDialog.setCancelable(true);
  52. progressDialog.show();
  53. super.onPreExecute();
  54. }
  55. @Override
  56. protected Boolean doInBackground(String... params) {//执行任务
  57. // TODO Auto-generated method stub
  58. MultipartEntityBuilder builder = MultipartEntityBuilder.create();
  59. builder.setCharset(Charset.forName(HTTP.UTF_8));//设置请求的编码格式
  60. builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式
  61. int count=0;
  62. for (File file:files) {
  63. // FileBody fileBody = new FileBody(file);//把文件转换成流对象FileBody
  64. // builder.addPart("file"+count, fileBody);
  65. builder.addBinaryBody("file"+count, file);
  66. count++;
  67. }
  68. builder.addTextBody("method", "method");//设置请求参数
  69. builder.addTextBody("fileTypes", ".pcap");//设置请求参数
  70. HttpEntity entity = builder.build();// 生成 HTTP POST 实体
  71. totalSize = entity.getContentLength();//获取上传文件的大小
  72. ProgressOutHttpEntity progressHttpEntity = new ProgressOutHttpEntity(
  73. entity, new ProgressListener() {
  74. @Override
  75. public void transferred(long transferedBytes) {
  76. publishProgress((int) (100 * transferedBytes / totalSize));//更新进度
  77. }
  78. });
  79. return uploadFile(url, progressHttpEntity);
  80. }
  81. @Override
  82. protected void onProgressUpdate(Integer... values) {//执行进度
  83. // TODO Auto-generated method stub
  84. Log.i("info", "values:"+values[0]);
  85. progressDialog.setProgress((int)values[0]);//更新进度条
  86. super.onProgressUpdate(values);
  87. }
  88. @Override
  89. protected void onPostExecute(Boolean result) {//执行结果
  90. // TODO Auto-generated method stub
  91. progressDialog.dismiss();
  92. super.onPostExecute(result);
  93. }
  94. /**
  95. * 向服务器上传文件
  96. * @param url
  97. * @param entity
  98. * @return
  99. */
  100. public boolean uploadFile(String url, ProgressOutHttpEntity entity) {
  101. HttpClient httpClient=new DefaultHttpClient();// 开启一个客户端 HTTP 请求
  102. httpClient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
  103. httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);// 设置连接超时时间
  104. HttpPost httpPost = new HttpPost(url);//创建 HTTP POST 请求
  105. httpPost.setEntity(entity);
  106. try {
  107. HttpResponse httpResponse = httpClient.execute(httpPost);
  108. if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  109. Toast.makeText(context, "上传成功", Toast.LENGTH_SHORT).show();
  110. return true;
  111. }
  112. } catch (ClientProtocolException e) {
  113. e.printStackTrace();
  114. } catch (ConnectTimeoutException e) {
  115. e.printStackTrace();
  116. } catch (Exception e) {
  117. e.printStackTrace();
  118. } finally {
  119. if (httpClient != null && httpClient.getConnectionManager() != null) {
  120. httpClient.getConnectionManager().shutdown();
  121. }
  122. }
  123. Toast.makeText(context, "上传失败", Toast.LENGTH_SHORT).show();
  124. return false;
  125. }
  126. }