@Override
public void upload(String url,Map<String, String> params,
Map<String, File> files, HttpUploadListener listener) {
LogUtils.logV("文件上传地址是:" + url);
String boundary = UUID.randomUUID().toString();
// 前缀
String prefix = "--";
String crlf = "\r\n";
DataOutputStream dos = null;
BufferedReader br = null;
HttpURLConnection connect = null;
try {
connect = (HttpURLConnection)new URL(url).openConnection();
connect.setConnectTimeout(connectTimeout);
connect.setReadTimeout(readTimeout);
connect.setDoInput(true);
connect.setDoOutput(true);
connect.setUseCaches(false);
connect.setRequestMethod("POST");
connect.setRequestProperty("Connection","keep-alive");
connect.setRequestProperty("Carset","UTF-8");//HttpService.DEFAULT_ENCODING
connect.setRequestProperty("Content-type","multipart/form-data"+"; boundary="+boundary);
StringBuffer buffer = new StringBuffer();
if(params!=null){
listener.onStatus("上传基本文字信息。。");
for (Map.Entry<String, String> data : params.entrySet()) {
buffer.append(prefix).append(boundary).append(crlf);
buffer.append("Content-Disposition:form-data; name=\""+data.getKey()+"\"").append(crlf);
buffer.append("Content-Type: text/plain; charset=" +"UTF-8").append(crlf);
buffer.append("Content-Transfer-Encoding: 8bit").append(crlf);
buffer.append(crlf);
buffer.append(data.getValue()).append(crlf);
}
}
dos = new DataOutputStream(connect.getOutputStream());
dos.write(buffer.toString().getBytes());
//-----------------------------
if(!isCancel&¶ms!=null){
Log.i("TAG", "执行文件上传..");
for(Map.Entry<String, File> file : files.entrySet()){
listener.onStatus("上传文件..."+file.getKey());
StringBuffer buffer2 = new StringBuffer();
buffer2.append(prefix).append(boundary).append(crlf);
buffer2.append("Content-Disposition: form-data; name=\""+file.getKey()+"\"; filename=\""+file.getKey()+"\"").append(crlf);
buffer2.append("Content-Type: application/octet-stream; carset=" + "UTF-8").append(crlf);
buffer2.append(crlf);
dos.write(buffer2.toString().getBytes());
InputStream is = new FileInputStream(file.getValue());
byte[] temp = new byte[1024];
int len = 0;
while((len = is.read(temp))!=-1){
dos.write(temp,0,len);
}
is.close();
dos.write(crlf.getBytes());
}
}else if(!isCancel&¶ms==null){
Log.i("TAG", "執行。。。。。。。。。。。。。。。");
for(Map.Entry<String, File> file : files.entrySet()){
listener.onStatus("上传文件..."+file.getKey());
StringBuffer buffer2 = new StringBuffer();
dos.write(buffer2.toString().getBytes());
InputStream is = new FileInputStream(file.getValue());
byte[] temp = new byte[1024];
int len = 0;
while((len = is.read(temp))!=-1){
dos.write(temp,0,len);
}
is.close();
}
}
byte[] endTag = (prefix+boundary+prefix+crlf).getBytes();
dos.write(endTag);
dos.flush();
//------------------------
Log.i("没执行", "执行了让");
//响应码是否是ok
LogUtils.logI("响应代码:"+connect.getResponseCode());
if(!isCancel&&connect.getResponseCode()==HttpURLConnection.HTTP_OK){
Log.i("没执行", "呵呵哒");
InputStream is = connect.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
br = new BufferedReader(isr);
String result = br.readLine();
listener.onExecute("加载数据", result);
listener.onFinish();
}else{
listener.onError("执行代码:"+connect.getResponseCode());
}
} catch (MalformedURLException e) {
listener.onError("异常:"+e.getMessage());
LogUtils.logE(CLASS,"异常:"+e.getMessage());
} catch (IOException e) {
listener.onError("IO异常:"+e.getMessage());
LogUtils.logE(CLASS,"IO异常:"+e.getMessage());
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(dos!=null){
dos.close();
}
if(br!=null){
br.close();
}
if(connect!=null){
connect.disconnect();
}
}catch (IOException e) {
listener.onError("关闭流异常:"+e.getMessage());
LogUtils.logE(CLASS,"关闭流出错!");
dos = null;
br = null;
}
}
}
/**
* 连接网络 上传身份证件照片
* @param ATTR_VAL SIM卡的89编号
* @param ORDER_NUM 订单编号
* @param uploadA 身份证正面照文件
* @param uploadB 身份证反面照文件
* @param uploadC 自拍照文件
*/
private void httpUpload(final String ATTR_VAL,final String ORDER_NUM,final File uploadA,final File uploadB,final File uploadC){
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog = DialogUtils.showProgressDialog(context, "正在处理..");
progressDialog.setCancelable(true);
}
});
new Thread();
new Thread(new Runnable() {
@Override
public void run() {
final String Url = Config.getUrl(Config.ZJSCAction);
logI("上传身份证照片的地址是:"+Url);
final HashMap<String, String> mapText = new HashMap<String, String>();
mapText.put("ATTR_VAL",ATTR_VAL);
mapText.put("ORDER_NUM", ORDER_NUM);
final HashMap<String, File> mapFiles = new HashMap<String, File>();
mapFiles.put("uploadA", uploadA);
mapFiles.put("uploadB", uploadB);
mapFiles.put("uploadC", uploadC);
HttpFileUpload httpFileUpload = new HttpFileUploadImpl();
httpFileUpload.upload(Url, mapText, mapFiles, new HttpUploadListener() {
@Override
public void onStatus(String message) {
logI("照片上传进度:"+message);
}
@Override
public void onFinish() {
showToast("上传操作完成!");
DialogUtils.dismissProgressDialog(progressDialog, handler);
}
@Override
public void onExecute(String message, String respons) {
logI("上传返回的数据:"+respons);
}
@Override
public void onError(String error) {
dismissProgressDialog();
logE("照片上传出错:"+error);
DialogUtils.dismissProgressDialog(progressDialog, handler);
}
});
}
}).start();
}
http://blog.csdn.net/baidu_nod/article/details/38467025?utm_source=tuicool&utm_medium=referral 希望可以帮到你
UI阻塞了,把网络请求的这一部分写到一个线程里面,new一个Thread
HttpURLConnection connect = null;
try {
connect = (HttpURLConnection)new URL(url).openConnection();
connect.setConnectTimeout(connectTimeout);
connect.setReadTimeout(readTimeout);
connect.setDoInput(true);
connect.setDoOutput(true);
connect.setUseCaches(false);
connect.setRequestMethod("POST");
…………
}