标签:android style class blog code java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 |
package
com.home.uploadfile;import java.io.File;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import
android.widget.Toast;public
class MainActivity extends
Activity implements
OnClickListener { private
Button uploadBtn; private
HttpMultipartPost post; @Override protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); uploadBtn = (Button) findViewById(R.id.main_btn_upload); uploadBtn.setOnClickListener(this); } @Override public
void onClick(View v) { if
(v == uploadBtn) { // 自己手机上的一张图片路径 String filePath = "/storage/sdcard0/updateAdtech/orgpic/1.png"; File file = new
File(filePath); if
(file.exists()) { post = new
HttpMultipartPost(MainActivity.this, filePath, url); post.execute(); } else
{ Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_LONG) .show(); } } // if (post != null) { // if (!post.isCancelled()) { // post.cancel(true); // } // } }} |
AsyncTask子类:HttpMultipartPost:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 |
package
com.home.uploadfile;import java.io.File;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.impl.client.DefaultHttpClient;import
org.apache.http.protocol.BasicHttpContext;import
org.apache.http.protocol.HttpContext;import
org.apache.http.util.EntityUtils;import
com.home.uploadfile.CustomMultipartEntity.ProgressListener;import
android.app.ProgressDialog;import
android.content.Context;import
android.os.AsyncTask;public
class HttpMultipartPost extends
AsyncTask<String, Integer, String> { private
Context context; private
String filePath; private
ProgressDialog pd; private
long totalSize; private
String requestUrl; public
HttpMultipartPost(Context context, String filePath, String requestUrl) { this.context = context; this.filePath = filePath; this.requestUrl = requestUrl; } @Override protected
void onPreExecute() { pd = new
ProgressDialog(context); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("Uploading Picture..."); pd.setCancelable(false); pd.show(); } @Override protected
String doInBackground(String... params) { String serverResponse = null; HttpClient httpClient = new
DefaultHttpClient(); HttpContext httpContext = new
BasicHttpContext(); HttpPost httpPost = new
HttpPost(requestUrl); try
{ CustomMultipartEntity multipartContent = new
CustomMultipartEntity( new
ProgressListener() { @Override public
void transferred(long
num) { publishProgress((int) ((num / (float) totalSize) * 100)); } }); // 使用FileBody上传图片 multipartContent.addPart("value", new
FileBody(new
File(filePath))); totalSize = multipartContent.getContentLength(); // 上传 httpPost.setEntity(multipartContent); HttpResponse response = httpClient.execute(httpPost, httpContext); serverResponse = EntityUtils.toString(response.getEntity()); System.out.println(serverResponse); } catch
(Exception e) { e.printStackTrace(); } return
serverResponse; } @Override protected
void onProgressUpdate(Integer... progress) { pd.setProgress((int) (progress[0])); } @Override protected
void onPostExecute(String result) { System.out.println("result: "
+ result); pd.dismiss(); } @Override protected
void onCancelled() { System.out.println("cancle"); }} |
MultipartEntity子类:CustomMultipartEntity
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 |
package
com.home.uploadfile;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;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; } @Override public
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); } }} |
参考:
http://m.blog.csdn.net/blog/u010142437/14639651
http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/
使用MultipartEntity上传文件(带进度对话框),布布扣,bubuko.com
标签:android style class blog code java
原文地址:http://www.cnblogs.com/perfy/p/3783915.html