packagenewairtek.com.utils;importcom.android.volley.AuthFailureError;importcom.android.volley.NetworkResponse;importcom.android.volley.Request;importcom.android.volley.Response;importcom.android.volley.VolleyLog;importcom.android.volley.toolbox.HttpHeaderParser;importorg.apache.http.entity.mime.MultipartEntity;importorg.apache.http.entity.mime.content.FileBody;importorg.apache.http.entity.mime.content.StringBody;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.nio.charset.Charset;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/*** Created by Administrator on 2016/1/12.
* ---------Volley图片上传-------------*/
public class MultipartRequest extends Request{private MultipartEntity entity = newMultipartEntity();private final Response.ListenermListener;private ListmFileParts;privateString mFilePartName;private MapmParams;/*** 单个文件
*@paramurl
*@paramerrorListener
*@paramlistener
*@paramfilePartName
*@paramfile
*@paramparams*/
publicMultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listenerlistener, String filePartName, File file,
Mapparams) {super(Method.POST, url, errorListener);
mFileParts= new ArrayList();if (file != null) {
mFileParts.add(file);
}
mFilePartName=filePartName;
mListener=listener;
mParams=params;
buildMultipartEntity();
}/*** 多个文件,对应一个key
*@paramurl
*@paramerrorListener
*@paramlistener
*@paramfilePartName
*@paramfiles
*@paramparams*/
publicMultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listenerlistener, String filePartName,
List files, Mapparams) {super(Method.POST, url, errorListener);
mFilePartName=filePartName;
mListener=listener;
mFileParts=files;
mParams=params;
buildMultipartEntity();
}private voidbuildMultipartEntity() {if (mFileParts != null && mFileParts.size() > 0) {for(File file : mFileParts) {
entity.addPart(mFilePartName,newFileBody(file));
}long l =entity.getContentLength();//CLog.log(mFileParts.size()+"个,长度:"+l);
}try{if (mParams != null && mParams.size() > 0) {for (Map.Entryentry : mParams.entrySet()) {
entity.addPart(
entry.getKey(),newStringBody(entry.getValue(), Charset
.forName("UTF-8")));
}
}
}catch(UnsupportedEncodingException e) {
VolleyLog.e("UnsupportedEncodingException");
}
}
@OverridepublicString getBodyContentType() {returnentity.getContentType().getValue();
}
@Overridepublic byte[] getBody() throwsAuthFailureError {
ByteArrayOutputStream bos= newByteArrayOutputStream();try{
entity.writeTo(bos);
}catch(IOException e) {
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}returnbos.toByteArray();
}
@Overrideprotected ResponseparseNetworkResponse(NetworkResponse response) {//CLog.log("parseNetworkResponse");
if(VolleyLog.DEBUG) {if (response.headers != null) {for (Map.Entryentry : response.headers
.entrySet()) {
VolleyLog.d(entry.getKey()+ "=" +entry.getValue());
}
}
}
String parsed;try{
parsed= newString(response.data,
HttpHeaderParser.parseCharset(response.headers));
}catch(UnsupportedEncodingException e) {
parsed= newString(response.data);
}returnResponse.success(parsed,
HttpHeaderParser.parseCacheHeaders(response));
}/** (non-Javadoc)
*
* @see com.android.volley.Request#getHeaders()*/@Overridepublic Map getHeaders() throwsAuthFailureError {
VolleyLog.d("getHeaders");
Map headers = super.getHeaders();if (headers == null ||headers.equals(Collections.emptyMap())) {
headers= new HashMap();
}returnheaders;
}
@Overrideprotected voiddeliverResponse(String response) {
mListener.onResponse(response);
}
}