上传单张图片
@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字符串/表单