1、除了用到了Volley,还用到了一个包httpmime(下载地址:http://download.csdn.net/detail/chequer_lkp/8102751)

2、需要一个工具类,该类是继承的Volley的Request

package newairtek.com.utils;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.HttpHeaderParser;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by Administrator on 2016/1/12.
* ---------Volley图片上传-------------
*/ public class MultipartRequest extends Request<String> { private MultipartEntity entity = new MultipartEntity(); private final Response.Listener<String> mListener; private List<File> mFileParts;
private String mFilePartName;
private Map<String, String> mParams;
/**
* 单个文件
* @param url
* @param errorListener
* @param listener
* @param filePartName
* @param file
* @param params
*/
public MultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listener<String> listener, String filePartName, File file,
Map<String, String> params) {
super(Method.POST, url, errorListener); mFileParts = new ArrayList<File>();
if (file != null) {
mFileParts.add(file);
}
mFilePartName = filePartName;
mListener = listener;
mParams = params;
buildMultipartEntity();
}
/**
* 多个文件,对应一个key
* @param url
* @param errorListener
* @param listener
* @param filePartName
* @param files
* @param params
*/
public MultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listener<String> listener, String filePartName,
List<File> files, Map<String, String> params) {
super(Method.POST, url, errorListener);
mFilePartName = filePartName;
mListener = listener;
mFileParts = files;
mParams = params;
buildMultipartEntity();
} private void buildMultipartEntity() {
if (mFileParts != null && mFileParts.size() > 0) {
for (File file : mFileParts) {
entity.addPart(mFilePartName, new FileBody(file));
}
long l = entity.getContentLength();
// CLog.log(mFileParts.size()+"个,长度:"+l);
} try {
if (mParams != null && mParams.size() > 0) {
for (Map.Entry<String, String> entry : mParams.entrySet()) {
entity.addPart(
entry.getKey(),
new StringBody(entry.getValue(), Charset
.forName("UTF-8")));
}
}
} catch (UnsupportedEncodingException e) {
VolleyLog.e("UnsupportedEncodingException");
}
} @Override
public String getBodyContentType() {
return entity.getContentType().getValue();
} @Override
public byte[] getBody() throws AuthFailureError {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
entity.writeTo(bos);
} catch (IOException e) {
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
} @Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
// CLog.log("parseNetworkResponse");
if (VolleyLog.DEBUG) {
if (response.headers != null) {
for (Map.Entry<String, String> entry : response.headers
.entrySet()) {
VolleyLog.d(entry.getKey() + "=" + entry.getValue());
}
}
} String parsed;
try {
parsed = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed,
HttpHeaderParser.parseCacheHeaders(response));
} /*
* (non-Javadoc)
*
* @see com.android.volley.Request#getHeaders()
*/
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
VolleyLog.d("getHeaders");
Map<String, String> headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) {
headers = new HashMap<String, String>();
} return headers;
} @Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}
}

3、用法和Volley的其它请求方法基本上一样,只不过参数不太一样。

最新文章

  1. oracle 函数调用
  2. Java中Map的三种遍历方法
  3. maven配置发布仓库
  4. VMWare虚拟机下为Ubuntu 12.04.1配置静态IP_转
  5. Hiking 分类: 比赛 HDU 函数 2015-08-09 21:24 3人阅读 评论(0) 收藏
  6. php大力力 [032节] php设计时候遇见麻烦:XQB50-H8268 进水电磁阀
  7. Android度量单位说明(DIP,DP,PX,SP)
  8. NPOI读取Excel,导入数据到Excel练习01
  9. 通过简单的Linux内核启动程序代码窥探操作系统的启动原理
  10. HQL和Criteria
  11. [转]关于ASP.NET(C#)程序中TEXTBOX下动态DIV跟随[AJAX应用]
  12. pywinauto二次封装(pywinnat.py)
  13. 自己动手,丰衣足食!一大波各式各样的ImageView来袭!
  14. (转载)SVN 提交操作缩写(A D M R) .
  15. VR全景智慧城市,平台属于每个有创业梦想的人
  16. JavaScript 函数定义
  17. 编译安装centos6.9 php7.0 mysql5.6 nginx1.8
  18. easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)
  19. sql中select into和insert into的区别
  20. [转]Linux下彻底卸载mysql详解

热门文章

  1. java—单例设计模式
  2. 字符、字符串和文本的处理之String类型
  3. ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Cannot run program &quot;hive&quot;: error=2, No such file or directory
  4. SQL SERVICE日志收缩
  5. JDK并发包总结
  6. mpvue小程序图片404
  7. 使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
  8. java-构建jar带哟参数提示的
  9. 最短路径算法----Dijkstra (转)
  10. zoj 1760 Doubles(set集合容器的应用)