標籤: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實現