Retrofit表单上传

带文件的表单上传,目前使用过两种方式:

@POST("SSS/SSS")
    Observable<XXXBaseEntity> savePhotoIncident(@Body MultipartBody body);

@Multipart
    @POST("user/sss")
    Observable<BaseEntity<Empty>> upload(@PartMap() Map<String, RequestBody> partMap, @Part MultipartBody.Part file);

方式一:

MultipartBody body = RetrofitUtils.createMultipartBody(params, incident.getAppphotoincidents(), "appphotoincident");

方式二:

Map<String, RequestBody> params = new HashMap<>();
        params.put(UserParkingSpaces.ADDRESS, RetrofitUtils.createPartFromString(parkingSpaces.getAddress()));
        params.put(UserParkingSpaces.CATEGORYNO, RetrofitUtils.createPartFromString(parkingSpaces.getCategoryno()));
      
        MultipartBody.Part body = RetrofitUtils.createFilePart("photo", new File(parkingSpaces.getPhoto()));

        Network.getApis().uploadUserParkingSpace(params, body)
                .compose(context.bindToLifecycle())
                .compose(Network.check())
                .compose(Network.nullableCheck())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);


构造参数工具类 :


public class RetrofitUtils {

    private static final String MULTIPART_FORM_DATA = "multipart/form-data";

    public static RequestBody createPartFromString(String descriptionString) {
        return RequestBody.create(MediaType.parse(MULTIPART_FORM_DATA), descriptionString);
    }

    public static MultipartBody.Part createFilePart(String partName, File file) {

        RequestBody requestFile = RequestBody.create(MediaType.parse(MULTIPART_FORM_DATA), file);

        return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
    }

    public static MultipartBody createMultipartBody(Map<String, String> params, List<String> pic, String keyName) {
        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        for (String key : params.keySet()) {
            builder.addFormDataPart(key, params.get(key));
        }
        if (pic.size() > 0) {
            for (String image : pic) {
                File file = new File(image);
                if (file.exists()) {
                    String fileName = (file.getName().endsWith(".cnt") ? file.getName() + ".jpg" : file.getName());
                    builder.addFormDataPart(keyName, fileName, RequestBody.create(MediaType.parse("image/png"), file));
                }
            }
        }
        return builder.build();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值