Android Retrofit2.0 上传单张图片和多张图片

上传单张图片

	@Multipart
    @POST("invitation/upload")
    Flowable<BaseResponse> uploadImage(@Part MultipartBody.Part part);

然后进行调用

val file = File(selectList!![i].compressPath)
val requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file)
val body = MultipartBody.Part.createFormData("file", file.name, requestFile)  

getApiService().uploadImage(body )
	.observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe()

上传多张图片

@Multipart
@POST("invitation/upload")
Flowable<BaseResponse<UploadApplyInfo>> uploadImages(@Part List<MultipartBody.Part> list);  

然后进行调用

val list = ArrayList<MultipartBody.Part>()

for(i in 0 until selectList!!.size){
    val file = File(selectList!![i].compressPath)
    val requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file)
    val body = MultipartBody.Part.createFormData("file$i", file.name, requestFile)
    list.add(body)
}

getApiService().uploadImages(list)
	.observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe()

上传多张图片(方式二)

@Multipart
@POST("invitation/api/v1/upload/parkingPoint")
Flowable<BaseResponse<UploadApplyInfo>> uploadApplyParkPointImage5(@PartMap Map<String, RequestBody> map);  

然后进行调用

val map = HashMap<String, RequestBody>()
for(i in 0 until selectList!!.size){
    val file = File(selectList!![i].compressPath)
    val requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file)
    map["file$i\"; filename=\"" + file.name] = requestFile //注意这里的\",报文中如需要filename,需要进行拼接成,类似于name="file1"; filename="Luban_1556607036831.jpg"的形式
}

getApiService().uploadApplyParkPointImage5(map)
	.observeOn(AndroidSchedulers.mainThread())
	.subscribeOn(Schedulers.io())
	.subscribe()  

这里,上传多张图片,也可以使用
uploadImages(@Part MultipartBody.Part… files),可变参数,但需要提前知道图片个数
uploadImages(@Part MultipartBody.Part file1,@Part MultipartBody.Part file2),固定参数,需要提前知道图片个数

上传单张图片的报文

贴上报文日志以作参考

D/OkHttp: --> POST http://xxxx.xxxx.com/invitation/upload
D/OkHttp: Content-Type: multipart/form-data; boundary=9741fa91-558d-4b71-9117-e44139c9c02c
D/OkHttp: Content-Length: 117843
D/OkHttp: --9741fa91-558d-4b71-9117-e9c0144139cc
D/OkHttp: Content-Disposition: form-data; name="file"; filename="Luban_1556607508304.jpg"
D/OkHttp: Content-Type: multipart/form-data
D/OkHttp: Content-Length: 117616
D/OkHttp: ������JFIF����������������C��.....省略.....
D/OkHttp: �kr*�\�Y5&��d��&��:��D`ȋ���
D/OkHttp: --9741fa91-558d-4b71-9117-e9c0144139cc--
D/OkHttp: --> END POST (117843-byte body)
D/OkHttp: <-- 200 OK http://xxxx.xxxx.com/invitation/upload (186ms)
D/OkHttp: Server: openresty/1.13.6.2
D/OkHttp: Date: Tue, 30 Apr 2019 06:58:31 GMT
D/OkHttp: Content-Type: application/json;charset=UTF-8
D/OkHttp: Content-Length: 113
D/OkHttp: Connection: keep-alive
D/OkHttp: {"success":true,"msg":"上传成功","data":{"imgs":"parkingpoint_img/609c6d62-b76d-47f3-98fc-8663d25bae60.jpg"}}
D/OkHttp: <-- END HTTP (113-byte body)

上传多张图片的报文

贴上报文日志以作参考

D/OkHttp: --> POST http://xxxx.xxxx.com/invitation/upload
D/OkHttp: Content-Type: multipart/form-data; boundary=0a8b3a28-37b9-49be-a23e-e57470f29025
D/OkHttp: Content-Length: 234964
D/OkHttp: --0a8b3a28-37b9-49be-a23e-e590257470f1
D/OkHttp: Content-Disposition: form-data; name="file1"; filename="Luban_1556603633113.jpg"
D/OkHttp: Content-Type: multipart/form-data
D/OkHttp: Content-Length: 116938
D/OkHttp: ������JFIF����������������C��.....省略.....
D/OkHttp: --0a8b3a28-37b9-49be-a23e-e590257470f1
D/OkHttp: Content-Disposition: form-data; name="file2"; filename="Luban_1556603633644.jpg"
D/OkHttp: Content-Type: multipart/form-data
D/OkHttp: Content-Length: 117616
D/OkHttp: ������JFIF����������������C��.....省略.....
D/OkHttp: --0a8b3a28-37b9-49be-a23e-e590257470f1--
D/OkHttp: --> END POST (234964-byte body)
D/OkHttp: <-- 200 OK http://xxxx.xxxx.com/invitation/upload (1129ms)
D/OkHttp: Server: openresty/1.13.6.2
D/OkHttp: Date: Tue, 30 Apr 2019 05:53:57 GMT
D/OkHttp: Content-Type: application/json;charset=UTF-8
D/OkHttp: Content-Length: 113
D/OkHttp: Connection: keep-alive
D/OkHttp: {"success":true,"msg":"上传成功","data":{"imgs":"parkingpoint_img/6bab770d-f017-440a-88e4-bb80593a9a7d.jpg,parkingpoint_img/602fdd4b-e52a-4c98-9068-f12e1de7e55f.jpg"}}
D/OkHttp: <-- END HTTP (113-byte body)

可以看到,上传单张图片和多张图片的区别,就在于请求内容的个数

其他

【Android实战】----基于Retrofit实现多图片/文件、图文上传
Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传
Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值