/***************通过拼接的方式构造请求内容,实现参数传输以及文件传输****************/
public static String post(String url, Map<String, String> params, Map<String, File> files)
throws IOException {
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
URL uri = new URL(url);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
conn.setReadTimeout(10 * 1000); // 缓存的最长时间
conn.setDoInput(true);// 允许输入
conn.setDoOutput(true);// 允许输出
conn.setUseCaches(false); // 不允许使用缓存
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
// 首先组拼文本类型的参数
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
outStream.write(sb.toString().getBytes());
// 发送文件数据
if (files != null)
for (Map.Entry<String, File> file : files.entrySet()) {
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data; name=\"picture\"; filename=\""
+ file.getValue().getName() + "\"" + LINEND);
sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
sb1.append(LINEND);
outStream.write(sb1.toString().getBytes());
InputStream is = new FileInputStream(file.getValue());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
is.close();
outStream.write(LINEND.getBytes());
}
// 请求结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
outStream.write(end_data);
outStream.flush();
// 得到响应码
int res = conn.getResponseCode();
InputStream in = conn.getInputStream();
StringBuilder sb2 = new StringBuilder();
if (res == 200) {
int ch;
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
outStream.close();
conn.disconnect();
return sb2.toString();
}
调用:
private void uploadImageFile(){
new Thread(new Runnable() {
@Override
public void run() {
int uploadResult = UPLOAD_FAIl;
//String requestURL = RequestUrl.URL + RequestUrl.Auth;
String requestURL = “http://192.168.1.68:8083“+RequestUrl.Auth;//局域网测试
//String requestURL = “http://192.168.1.68:8083/personal/test.html“;
final Map<String, String> params = new HashMap<String, String>();
String organizationId = mExpressCompanyToIdMap.get(mCompanyName);
params.put("account",account);
params.put("name", mRealName);
params.put("organizationId", "1");//公司Id
//params.put("provinceId", "110000");/*数据库查找*/
//params.put("cityId", "110100");
//params.put("areaId", "110101");
params.put("address", "北京市朝阳区酒仙桥东路");
final Map<String, File> files = new HashMap<String, File>();
//(debug)File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"/UCDownloads/4.jpg");
Log.i("PATH+++++++++++NAME", file.getPath()+","+file.getName());
files.put("picture", file);
String request = null;
try {
request = FileImageUpload.post(requestURL, params, files);
} catch (IOException e) {
e.printStackTrace();
}
Log.i("TAg","=======request==========="+request);
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(request);
} catch (JSONException e) {
mHandler.sendEmptyMessage(uploadResult);
e.printStackTrace();
}
try {
if(jsonObject.getString("resultCode").equals("00000"))
{
uploadResult = UPLOAD_SUCCESS;
mHandler.sendEmptyMessage(uploadResult);
Log.d("UploadImage", "上传成功" + "resultMessage:" + jsonObject.getString("resultMessage"));
}
else{
mHandler.sendEmptyMessage(uploadResult);
Log.d("UploadImage","上传失败");
}
} catch (JSONException e) {
mHandler.sendEmptyMessage(uploadResult);
Log.d("UploadImage网络异常","上传失败");
e.printStackTrace();
}
}
}).start();
更新UI:
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case UPLOAD_SUCCESS:
{
//上传验证图片成功
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_success).toString(),Toast.LENGTH_LONG).show();
finish();
break;
}
case UPLOAD_FAIl:
{
//上传图片失败
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_fail).toString(),Toast.LENGTH_LONG).show();
break;
}
}
}
};