文档章节

数行代码实现利用Volley网络框架上传文件

致远科技
 致远科技
发布于 2016/01/12 12:12
字数 325
阅读 4006
收藏 4

首先自己写一个MultipartRequest类,继承自StringRequest。

import com.android.internal.http.multipart.Part;
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.StringRequest;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class MultipartRequest extends StringRequest {
    private Part[] parts;

    public MultipartRequest(String url, Part[] parts, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(Method.POST, url, listener, errorListener);
        this.parts = parts;
    }

    @Override
    public String getBodyContentType() {
        return "multipart/form-data; boundary=" + Part.getBoundary();
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            Part.sendParts(baos, parts);
        } catch (IOException e) {
            VolleyLog.e(e, "error when sending parts to output!");
        }
        return baos.toByteArray();
    }
}


重写了StringRequest中的getBody()和getBodyContentType()方法就可以了。

使用方法:

//构造参数列表
List<Part> partList = new ArrayList<Part>();
partList.add(new StringPart("username", "hellfire"));
partList.add(new StringPart("email", "ouyangjun@aliyun.com"));
try {
    partList.add(new FilePart("photo", new File("/mnt/sdcard/Test/hellfire.jpg")));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
//获取队列
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url = "http://test/profileUpdate.do";
//生成请求
MultipartRequest profileUpdateRequest = new MultipartRequest(url, partList.toArray(new Part[partList.size()]), new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        //处理成功返回信息
        String info = response.substring(0, 20);
        Toast.makeText(getApplication(), info, Toast.LENGTH_SHORT).show();
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        //处理失败错误信息
        Log.e("MultipartRequest", error.getMessage(), error);
        Toast.makeText(getApplication(), error.getMessage(), Toast.LENGTH_SHORT).show();
    }
});
//将请求加入队列
requestQueue.add(profileUpdateRequest);


© 著作权归作者所有

致远科技
粉丝 0
博文 1
码字总数 325
作品 0
金山
项目经理
私信 提问
加载中

评论(7)

小鸟3号
小鸟3号
nice
N
NavyYan
怎么设置上传文字为UTF_8
贝贝3笑
Part的问题可参考http://blog.csdn.net/yangqingqo/article/details/48214865
贝贝3笑
Part是android6.0里面的jar包,libs中加入

org.apache.http.legacy.jar
包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)
you缘么
you缘么
Part 是什么鬼东西,Android jar包中包厢没有这个类把?com.android.internal.http.multipart.Part
致远科技
致远科技

引用来自“花花兽”的评论

Part 是什么...
引用com.android.internal.http.multipart.Part,android里带的多媒体块实现类
花花兽
花花兽
Part 是什么...
retrofit,okhttp

Android RxJava+Retrofit2+RxBinding RxJava+Retrofit2+RxBinding 笔记 MVP + Rxjava + Retrofit 构建项目 2015 年最值得 Android 程序猿去学习的就是 RxJava 了,关于 RxJava 就不再多描述了......

掘金官方
2018/01/11
0
0
Volley-XUtils-OkHttp三种方式实现单张多张图片上传

OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用。OkHttp更多功能请看OkHttp的使用 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多...

切切歆语
2016/12/22
85
0
使用volley上传图片,一个参数多张图、多张图片多张图,亲测有效哦

一、前言 Google自从2013的IO大会上发布volley框架之后就受到广泛应用,的确,用过几个网络请求库,感觉volley还是很好用的,用起来也特别方便顺手。但是遇到上传文件就比较麻烦,尤其是有时...

丁佳辉
2015/08/13
0
2
Java 基础(二十)网络框架设计 MyVolley (上)

上周答应大家的,手撸一个网络请求框架。 学了快两个月的 java 基础,现在我们来手撸一个网络请求框架练练手。 手写一个网络请求框架需要掌握的知识点比较多,其中牵涉到设计模式、集合、泛型...

diamond_lin
2017/11/30
0
0
Android 中判断网络连接和GPS是否可用及HTTPCLIENT使用

大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发...

xztelecomlcs
2017/03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
5
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
2
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
3
0
Java设计模式之外观模式(门面模式)

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部