[多檔案上傳一]利用httpmime.jar實現

來源:互聯網
上載者:User

標籤:android   style   http   io   os   使用   java   ar   for   

import java.io.File;import java.nio.charset.Charset;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.protocol.BasicHttpContext;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;import android.app.ProgressDialog;import android.content.Context;import android.os.AsyncTask;import com.lxb.uploadwithprogress.http.CustomMultipartEntity.ProgressListener;/** * Multipart上傳(需要httpmime.jar) */public class HttpMultipartPost extends AsyncTask<String, Integer, String> {        private static final String TAG = HttpMultipartPost.class.getSimpleName();private Context context;//上下文private List<String> filePathList;//上傳檔案清單private ProgressDialog pd;//對話方塊private long totalSize;//總大小public HttpMultipartPost(Context context, List<String> filePathList) {this.context = context;this.filePathList = filePathList;}@Overrideprotected void onPreExecute() {pd = new ProgressDialog(context);pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.setMessage("上傳中...");pd.setCancelable(false);pd.show();}@Overrideprotected String doInBackground(String... params) {String result = null;HttpClient httpClient = new DefaultHttpClient();HttpContext httpContext = new BasicHttpContext();HttpPost httpPost = new HttpPost("URL");try {        //監聽上傳進度CustomMultipartEntity multipartContent = new CustomMultipartEntity(new ProgressListener() {@Overridepublic void transferred(long num) {publishProgress((int) ((num / (float) totalSize) * 100));}});//把上傳內容添加到MultipartEntityfor (int i = 0; i < filePathList.size(); i++) {multipartContent.addPart("file", new FileBody(new File(filePathList.get(i))));multipartContent.addPart("data", new StringBody(filePathList.get(i),                         Charset.forName(org.apache.http.protocol.HTTP.UTF_8)));}totalSize = multipartContent.getContentLength();Log.i(TAG,"totalSize: " + totalSize);httpPost.setEntity(multipartContent);HttpResponse response = httpClient.execute(httpPost, httpContext);        result = EntityUtils.toString(response.getEntity());Log.i(TAG,"result: " + result);} catch (Exception e) {e.printStackTrace();}return result;}@Overrideprotected void onProgressUpdate(Integer... progress) {pd.setProgress((int) (progress[0]));}@Overrideprotected void onPostExecute(String result) {Log.i(TAG,"result: " + result);pd.dismiss();}@Overrideprotected void onCancelled() {Log.i(TAG,"onCancelled...");}}
import java.io.FilterOutputStream;import java.io.IOException;import java.io.OutputStream;import java.nio.charset.Charset;import org.apache.http.entity.mime.HttpMultipartMode;import org.apache.http.entity.mime.MultipartEntity;/** * CustomMultipartEntity.classs 用於監聽和封裝Filebody參數 */public class CustomMultipartEntity extends MultipartEntity {private final ProgressListener listener;public CustomMultipartEntity(final ProgressListener listener) {super();this.listener = listener;}public CustomMultipartEntity(final HttpMultipartMode mode,final ProgressListener listener) {super(mode);this.listener = listener;}public CustomMultipartEntity(HttpMultipartMode mode, final String boundary,final Charset charset, final ProgressListener listener) {super(mode, boundary, charset);this.listener = listener;}@Overridepublic void writeTo(OutputStream outstream) throws IOException {super.writeTo(new CountingOutputStream(outstream, this.listener));}public static interface ProgressListener {void transferred(long num);}public static class CountingOutputStream extends FilterOutputStream {private final ProgressListener listener;private long transferred;public CountingOutputStream(final OutputStream out,final ProgressListener listener) {super(out);this.listener = listener;this.transferred = 0;}public void write(byte[] b, int off, int len) throws IOException {out.write(b, off, len);this.transferred += len;this.listener.transferred(this.transferred);}public void write(int b) throws IOException {out.write(b);this.transferred++;this.listener.transferred(this.transferred);}}}

使用方法

  List<String> filePathList = new ArrayList<String>();  filePathList.add(Environment.getExternalStorageDirectory()+ "/baidu/cache/image/" + "12778991134.png");  filePathList.add(Environment.getExternalStorageDirectory()+ "/baidu/cache/image/" + "123457894146.png");  HttpMultipartPost httpPost = new HttpMultipartPost(Acitivity,filePathList);  httpPost.execute();


[多檔案上傳一]利用httpmime.jar實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.