Android实现批量照片上传至服务器,拍照或者从相册选择

最近由于项目需求,需要完成批量照片上传,折腾了一段时间,终于完成了,达到了如下效果

\\


< 喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1ve958Pm1vfSqtPQR3JpZFZpZXfX6bPJus2wtMWl1+mzyaOstbGwtM/C0ru49iYjMjY2ODQ7tePKsaOsu+G199PDz+C7+rvy1d/P4LLho6zFxNXVu/LV39Gh1PHP4LLh1dXGrKOs0aHU8c3qs8nWrrrzo6y9q8v1wtTNvM/Uyr7U2kdyaWRWaWV3o6zU2tXiwO/LtcP30rvPwqOsyOe5+0dyaWRWaWV3z9TKvrK7s/bAtKOsy7XD9828xqzMq7TzwcujrNDo0qrRucv1o6zU2s7StcTJz9K7xqqyqb/No6zP6s+4vbK94sHLzbzGrNG5y/W1xNStwO3T67n9s8yjrNXiwO+yu9TZ17jK9qGjPC9wPgo8cD7PwsPmzPnJz7T6wuujrDwvcD4KPHA+1ve958Pmo7o8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">package com.qian.pos; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Picture; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.qian.pos.util.BitmapUtil; import com.qian.pos.util.FileUtils; import com.qian.pos.util.PictureUtil; import com.qian.pos.util.UploadUtil; import com.qian.pos.util.UploadUtil.OnUploadProcessListener; import com.qian.servletasynchttp.R; public class ImageUploadActivity extends Activity// implements OnUploadProcessListener { private static final String TAG = "uploadImage"; protected static final int TO_UPLOAD_FILE = 1; protected static final int UPLOAD_FILE_DONE = 2; public static final int TO_SELECT_PHOTO = 3; private static final int UPLOAD_INIT_PROCESS = 4; private static final int UPLOAD_IN_PROCESS = 5; private static String requestURL = "http://114.55.72.18/UnionPay/UploadAction"; private Button uploadButton; //private ProgressBar progressBar; private String picPath = null; private ProgressDialog progressDialog; private GridView list_gv; private MyAdapter adapter; private HashMap imageMap = new HashMap(); private HashMap filePathMap = new HashMap(); private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case TO_UPLOAD_FILE: toUploadFile(); break; case UPLOAD_INIT_PROCESS: //progressBar.setMax(msg.arg1); break; case UPLOAD_IN_PROCESS: //progressBar.setProgress(msg.arg1); break; case UPLOAD_FILE_DONE: String result = "响应码:"+msg.arg1+"\n响应信息:"+msg.obj+"\n耗时:"+UploadUtil.getRequestTime()+"秒"; break; default: break; } super.handleMessage(msg); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } private void initView() { uploadButton = (Button) this.findViewById(R.id.uploadImage); uploadButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(picPath!=null) { handler.sendEmptyMessage(TO_UPLOAD_FILE); }else{ Toast.makeText(ImageUploadActivity.this, "上传的文件路径出错", Toast.LENGTH_LONG).show(); } } }); progressDialog = new ProgressDialog(this); list_gv = (GridView) findViewById(R.id.gv_image); adapter = new MyAdapter(); list_gv.setAdapter(adapter); list_gv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent; switch (position) { case 0: intent = new Intent(ImageUploadActivity.this,SelectPicActivity.class); startActivityForResult(intent, 0); break; case 1: intent = new Intent(ImageUploadActivity.this,SelectPicActivity.class); startActivityForResult(intent, 1); break; case 2: intent = new Intent(ImageUploadActivity.this,SelectPicActivity.class); startActivityForResult(intent, 2); break; case 3: intent = new Intent(ImageUploadActivity.this,SelectPicActivity.class); startActivityForResult(intent, 3); break; case 4: intent = new Intent(ImageUploadActivity.this,SelectPicActivity.class); startActivityForResult(intent, 4); break; } } }); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(ImageUploadActivity.this, R.layout.item_grid, null); ImageView image = (ImageView) view.findViewById(R.id.item_grida_image); Iterator iterator = imageMap.keySet().iterator(); while(iterator.hasNext()) { Integer next = iterator.next(); if(next.intValue() == position) { image.setImageBitmap(imageMap.get(next)); } } TextView textView = (TextView) view.findViewById(R.id.tv_explain); switch (position) { case 0: textView.setText("照片1"); break; case 1: textView.setText("照片2"); break; case 2: textView.setText("照片3"); break; case 3: textView.setText("照片4"); break; case 4: textView.setText("照片5"); break; default: break; } return view; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode==Activity.RESULT_OK) { picPath = data.getStringExtra(SelectPicActivity.KEY_PHOTO_PATH); Log.i(TAG, "最终选择的图片="+picPath); // Toast.makeText(getApplicationContext(), "最终选择的图片="+picPath, 0).show(); Bitmap bm = BitmapFactory.decodeFile(picPath); //Bitmap tempBitmap = BitmapUtil.createImageThumbnail(picPath,128);//压缩图片 //Bitmap saveBitmap = BitmapUtil.createImageThumbnail(picPath,2048); Bitmap tempBitmap = PictureUtil.getSmallBitmap(picPath, 128, 128);//压缩图片 Bitmap saveBitmap = PictureUtil.getSmallBitmap(picPath,1280,720);//上传服务器的bitmap 手机横着拍照 String path = Environment.getExternalStorageDirectory()+ "/pos/"+requestCode+".JPEG"; FileUtils.saveBitmap(saveBitmap, requestCode+""); filePathMap.put(requestCode, path); imageMap.put(requestCode, tempBitmap); //Toast.makeText(ImageUploadActivity.this, "第"+requestCode+"张图片", 0).show(); // System.out.println("imageMap"+imageMap.size()); // System.out.println("filePathMap"+filePathMap.size()); adapter.notifyDataSetChanged(); } super.onActivityResult(requestCode, resultCode, data); } private void toUploadFile() { progressDialog.setMessage("正在上传文件..."); progressDialog.show(); final String fileKey = "upload"; final UploadUtil uploadUtil = UploadUtil.getInstance();; uploadUtil.setOnUploadProcessListener(new OnUploadProcessListener() { @Override public void onUploadProcess(int uploadSize) { Message msg = Message.obtain(); msg.what = UPLOAD_IN_PROCESS; msg.arg1 = uploadSize; handler.sendMessage(msg); } @Override public void onUploadDone(int responseCode, String message) { progressDialog.dismiss(); Message msg = Message.obtain(); msg.what = UPLOAD_FILE_DONE; msg.arg1 = responseCode; msg.obj = message; handler.sendMessage(msg); } @Override public void initUpload(int fileSize) { Message msg = Message.obtain(); msg.what = UPLOAD_INIT_PROCESS; msg.arg1 = fileSize; handler.sendMessage(msg); } }); //设置监听器监听上传状态 final Map params = new HashMap(); params.put("dpnumber", "13800001111"); System.out.println(filePathMap.size()); new Thread(new Runnable() { int i = 0; @Override public void run() { final boolean uploadFile = uploadUtil.uploadFile(filePathMap,fileKey,requestURL,params); runOnUiThread(new Runnable() { @Override public void run() { if(uploadFile) { Toast.makeText(ImageUploadActivity.this, "上传成功", 0).show(); progressDialog.dismiss(); } else { Toast.makeText(ImageUploadActivity.this, "上传失败", 0).show(); progressDialog.dismiss(); } } }); } }).start(); } }

?
1
 

选择照片界面程序:

?
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package com.qian.pos;
 
import com.qian.servletasynchttp.R;
 
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
 
 
 
public class SelectPicActivity extends Activity implements OnClickListener{
 
     
     public static final int SELECT_PIC_BY_TACK_PHOTO = 1 ;
     
     public static final int SELECT_PIC_BY_PICK_PHOTO = 2 ;
     
     
     public static final String KEY_PHOTO_PATH = "photo_path" ;
     
     private static final String TAG = "SelectPicActivity" ;
     
     private LinearLayout dialogLayout;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值