一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下

/**

* Created by wangshihui on 2015/11/30.

* 上传文件

* url:.....

method:post

参数:file

接口给的参数:file 就是表单的key,传给mFilePartName;

这是个测试类,测试上传头像没有问题,适合只上传单个文件的场景

*/

public class MultipartRequest extends Request {

private String mHeader;

private Map mMap;

private String cookieFromResp = "";

private Map headerMap = new HashMap<>();

private MultipartEntity entity = new MultipartEntity();

private final Response.Listener mListener;

private final File mFilePart;

private String mFilePartName;

/**

* @param url

* @param listener

* @param errorListener

* @param file_name

* @param file

*/

public MultipartRequest(String url, Response.Listener listener, Response.ErrorListener errorListener, String file_name,File file)

{

super(Method.POST, url, errorListener);

mListener = listener;

mFilePart = file;

mFilePartName=file_name;

buildMultipartEntity();

}

/**

* 添加文件参数

*/

private void buildMultipartEntity()

{

entity.addPart(mFilePartName, new FileBody(mFilePart));

}

@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();

}

/**

* @param response

* @return

*/

@Override

protected Response parseNetworkResponse(NetworkResponse response)

{

try {

JSONObject jsonObject;

System.out.println(response.headers.toString());

if (response.data.length != 0) {

String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));

jsonObject = new JSONObject(jsonString);

} else {

jsonObject = new JSONObject();

}

//获取数据头

mHeader = response.headers.toString();

//提取Cookie(JSESSIONID)

Pattern pattern = Pattern.compile("Set-Cookie=.*?;");

Matcher matcher = pattern.matcher(mHeader);

if (matcher.find()) {

cookieFromResp = matcher.group();

cookieFromResp = cookieFromResp.substring(11, cookieFromResp.length() - 1);

System.out.println("Cookie: " + cookieFromResp);

}

jsonObject.put("Cookie", cookieFromResp);

return Response.success(jsonObject,

HttpHeaderParser.parseCacheHeaders(response));

} catch (UnsupportedEncodingException e) {

return Response.error(new ParseError(e));

} catch (JSONException je) {

return Response.error(new ParseError(je));

}

}

/**

* @param response

*/

@Override

protected void deliverResponse(JSONObject response)

{

mListener.onResponse(response);

}

@Override

protected Map getParams() throws AuthFailureError {

return mMap;

}

/**

* @return

* @throws AuthFailureError

*/

@Override

public Map getHeaders() throws AuthFailureError {

return headerMap;

}

/**

* @return

*/

@Override

public RetryPolicy getRetryPolicy() {

RetryPolicy retryPolicy = new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

return retryPolicy;

}

/**

* @param cookie

*/

//将Cookie加入数据头

public void setSendCookie(String cookie) {

headerMap.put("Cookie", cookie);

}

}

调用方法如下:

//指定url路径

String url = "http://182.92.....";

MultipartRequest multipartRequest = new MultipartRequest(

url, new Response.Listener() {

@Override

public void onResponse(JSONObject response) {

saveSessionID(response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError e) {

Log.e(TAG, e.getMessage(), e);

try {

byte[] htmlBodyBytes = e.networkResponse.data;

Log.e(TAG, new String(htmlBodyBytes), e);

} catch (Exception e1) {

e1.printStackTrace();

}

ToastUtil.showShortToast(UserCenterActivity.this, "网络连接异常");

}

}, "file", mSelectedPictureFile);

multipartRequest.setSendCookie(loadSessionID());

multipartRequest.setTag(TAG);

client.addTask(multipartRequest);

private File mSelectedPictureFile;

mSelectedPictureFile是一个File文件,参数名是file

通信成功保存Cookie

saveSessionID(response);

发送请求上传cookie

multipartRequest.setSendCookie(loadSessionID());

client是一个Volley的简单封装

protected AsynHttpClient client;

public class AsynHttpClient {

//volley的请求队列

private RequestQueue requestQueue;

//保证全局变量是单一的

private static AsynHttpClient instance;

private Context mContext;

private AsynHttpClient(Context context) {

requestQueue = Volley.newRequestQueue(context);

this.mContext = context;

}

/**

* 单列模式,让AsynHttpClient在整个项目中保持只有一个

* @param context

* @return

*/

public static AsynHttpClient getInstance(Context context) {

if (instance==null){

synchronized (AsynHttpClient.class){

if (instance==null){

instance=new AsynHttpClient(context);

}

}

}

return instance;

}

/**

* 添加任务到volley的请求队列中去,并不会立即执行

* @param task

*/

public void addTask(Request task){

requestQueue.add(task);

}

public RequestQueue getRequestQueue() {

return requestQueue;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android volley 上传图片 和参数,Android使用Volley实现上传文件功能相关推荐

  1. android volley 上传图片 和参数,android Volley 上传文件上传图片

    android volley 实现上传文件功能 Volley不解释了吧, android 官方的一个网络请求库. 源代码的地址在: git@github.com:com314159/VolleyMul ...

  2. android volley 上传图片 和参数,Android使用Volley上传文件

    一个项目中用到的使用Volley上传头像文件的例子 /** * Created by wangshihui on 2015/11/30. * 上传文件 *  url:..... method:post ...

  3. Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件

    折腾了好几天的 HTTP 终于搞定了,经测试正常,不过是初步用例测试用的,因为后面还要修改先把当前版本保存在博客里吧. 其中POST因为涉及多段上传需要导入两个包文件,我用的是最新的 httpmine ...

  4. vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...

    vue+axios+php如何实现上传文件功能?Vue Axios PHP如何实现上传文件的功能?, 推荐:<PHP视频教程> 当我们提交表单时,我们经常会遇到一些表单提交要求.vue的a ...

  5. android requestparams传入对象,Android xutils3上传文件使用示例

    Android xutils3工具上传文件非常方便,只需要传入File文件数据或一些其它参数给RequestParams对象即可完成,现在我们来开始使用xutils工具上传文件吧! 步骤一:需要在项目 ...

  6. android里面通过scp上传文件

    我网上搜索了到使用ganymed-ssh2-build210.jar来实现scp上传文件功能.我就不说具体的方法了.有些网友比我还认真写文档,写的比我漂亮多了. 问题一: 使用的时候,我发现总是连不上 ...

  7. android multipartentity 怎么上传参数,android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b...

    android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b 短版本-.jar已弃用,其升级版本java.lang.NoClassDefFoundError在 ...

  8. Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...

    摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...

  9. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

最新文章

  1. 这个口罩小朋友戴上就不肯脱!真相原来是这样!
  2. ActiveMQ集群
  3. jQuery easyUI--tabs选项卡面板
  4. linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
  5. 关于SQLserver 的windows验证
  6. C/C++线程基本函数
  7. 前端学习(83):按显示进行分类
  8. 前端大神的离逝,让我们不得不有所反思。
  9. OK6410裸机调试
  10. bomb android实战,android 仿qq app源码下载(bmob)
  11. 商家 APP 如何接入新版支付宝支付,老版本商家如何升级
  12. memcached 内存管理 分析(转)
  13. How to install innotop and percona tookit on centos
  14. JMX监测JVM报错
  15. [erlang]一次erlcron崩溃引起的事故分析
  16. tomcat 日志配置
  17. 基于有限元法的转子动力学建模---Timoshenko梁单元有限元建模
  18. 怎么彻底粉碎文件夹?文件还能恢复吗?操作过程在这里
  19. 斐讯k2路由器刷pandorabox认证哆点Drcom
  20. 对数函数log()用法

热门文章

  1. matlab解调2fsk,2FSK调制解调系统的MATLAB实现
  2. CF1251F Red-White Fence(多项式/背包问题/组合数学)
  3. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
  4. Codeforces Round #305 (Div. 1) D. Mike and Fish 欧拉回路
  5. E - Flow Gym - 102471E
  6. Knowledge is Power Gym - 102822K
  7. ssl提高组周六备考赛【2018.10.27】
  8. 初一模拟赛总结(2019.6.1)
  9. CF1120D Power Tree(树形DP/构造+差分+最小生成树)
  10. [系统安全]使用OD编写连连看外挂