retrofit2中的多表单(from-data)上传

在retrofit2中,多表单上传需要同时使用@Multipart和@POST,同时在输入参数中用@Part标记参数。

网上很多资料都是这样说的,但是依然很困惑,到底怎么用多表单上传数据呢?


这里首先要看下表单的报文结构:


如果之前已经了解过表单格式,可知每个boundary所分割的都是一个表单结构。其中请求体中由(1)、(2)所组成的表单1一般用于描述表单,由(3)、(4)、(5)组成的表单2则用于上传文件;如果是多个文件,则从表单2~表单N的结构都和表单2相同。


如上述的报文,在retrofit2中应该写成:

    @Multipart
    @POST("/upload")
    Observable<String> upload(@Part("interactionFile") RequestBody firstBody, @Part MultipartBody.Part file);

在这里,第一个参数RequestBody对应表单1,第二个参数Multipart.Body对应表单2

其中,第一个参数中@Part("xxx")中用于设置上图(1)中的name值。另外,使用Multipart.Body后,其对应的@Part注解中不能设置参数。


再看看对应的参数应该如何生成。

第一个参数:

RequestBody firstBody = RequestBody.create( MediaType.parse("multipart/form-data"), "test")

这里需要将body的类型设置为"multipart/form-data",这样在表单1中的content-type就会被设置为multipart/form-data;后面的参数用于描述表单,对应图中(2)的位置


第二个参数:

        Bitmap b = xxxx;//获取一个bitmap
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        RequestBody body = RequestBody.create(MediaType.parse("image/png"), byteArray);//content-type为image/png,其中byteArray中的数据对应图中(5)处
        MultipartBody.Part file = MultipartBody.Part.createFormData("interactionFile", "test.png", body);//分别对应图中(3)、(4)


以上是基本例子。

至于多文件上传,可以参考这里,用法大同小异:http://blog.csdn.net/jdsjlzx/article/details/51649382

MultipartBody也可以通过自定义converter来转换:http://chuansong.me/n/365421237869

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值