如何在改造多部分请求中获取上传进度百分比?

问题描述

以下是我使用 retrofit2 执行的多部分请求。 我想要的是以某种方式获得 upload percentage 的回调。 但我找不到合适的方法来做到这一点。我见过的方法很少,但它们只使用 single 文件 我想要实现的是获取合并请求中发送的所有文件上传进度百分比。


    @Multipart
    @POST("post/vehicle/detail")
    Call<SuccessModel> uploadVehicle(

            @Part("user_id") int userId,@Part("name") String vehicleName,@Part("number") int stockNumber,@Part MultipartBody.Part mainImage,@Part MultipartBody.Part hoodsImage,@Part MultipartBody.Part bumperImage,@Part MultipartBody.Part interiorImage,@Part MultipartBody.Part frontSeatimage,@Part MultipartBody.Part backSeatimage,@Part MultipartBody.Part dashboardImage,@Part MultipartBody.Part headLampsImage,@Part MultipartBody.Part tailLightsImage,@Part MultipartBody.Part backEngineImage
    );

编辑

关于我如何创建请求的更多代码


File mainImage = new File(vehicleEntity.mainImage);

            RequestBody requestMainFile = RequestBody.create(MediaType.parse("multipart/form-data"),mainImage);

            MultipartBody.Part main = MultipartBody.Part.createFormData("main_image",mainImage.getName(),requestMainFile);

            File hoodImage,bumperImage,interiorImage,frontSeatimage,backSeatimage,dashboardImage,headLampsImage,tailLightimage,backEngineImage;

            MultipartBody.Part hood = null,bumper = null,interior = null,frontSeat = null,backSeat = null,dashboard = null,headLamps = null,tailLights = null,backEngine = null;

            if (vehicleEntity.hoodsImage != null) {

                hoodImage = new File(vehicleEntity.hoodsImage);
                RequestBody requestHoodFile = RequestBody.create(MediaType.parse("multipart/form-data"),hoodImage);
                hood = MultipartBody.Part.createFormData("hoods",hoodImage.getName(),requestHoodFile);

            }

            if (vehicleEntity.bumperImage != null) {

                bumperImage = new File(vehicleEntity.bumperImage);
                RequestBody requestBumperFile = RequestBody.create(MediaType.parse("multipart/form-data"),bumperImage);
                bumper = MultipartBody.Part.createFormData("bumpers",requestBumperFile);

            }

            if (vehicleEntity.interiorImage != null) {

                interiorImage = new File(vehicleEntity.interiorImage);
                RequestBody requestInteriorFile = RequestBody.create(MediaType.parse("multipart/form-data"),interiorImage);
                interior = MultipartBody.Part.createFormData("interiors",requestInteriorFile);

            }

            if (vehicleEntity.frontSeatimage != null) {

                frontSeatimage = new File(vehicleEntity.frontSeatimage);
                RequestBody requestFrontSeatFile = RequestBody.create(MediaType.parse("multipart/form-data"),frontSeatimage);
                frontSeat = MultipartBody.Part.createFormData("front_seat",requestFrontSeatFile);

            }

            if (vehicleEntity.backSeatimage != null) {

                backSeatimage = new File(vehicleEntity.backSeatimage);
                RequestBody requestBackSeatFile = RequestBody.create(MediaType.parse("multipart/form-data"),backSeatimage);
                backSeat = MultipartBody.Part.createFormData("back_seat",requestBackSeatFile);

            }

            if (vehicleEntity.dashboardImage != null) {

                dashboardImage = new File(vehicleEntity.dashboardImage);
                RequestBody requestDashboardFile = RequestBody.create(MediaType.parse("multipart/form-data"),dashboardImage);
                dashboard = MultipartBody.Part.createFormData("dashboard",requestDashboardFile);

            }

            if (vehicleEntity.headLampsImage != null) {

                headLampsImage = new File(vehicleEntity.headLampsImage);
                RequestBody requestHeadLampsFile = RequestBody.create(MediaType.parse("multipart/form-data"),headLampsImage);
                headLamps = MultipartBody.Part.createFormData("headlamps",requestHeadLampsFile);

            }

            if (vehicleEntity.tailLightsImage != null) {

                tailLightimage = new File(vehicleEntity.tailLightsImage);
                RequestBody requestTailsLightFile = RequestBody.create(MediaType.parse("multipart/form-data"),tailLightimage);
                tailLights = MultipartBody.Part.createFormData("tail_light",requestTailsLightFile);

            }

            if (vehicleEntity.backEngineImage != null) {

                backEngineImage = new File(vehicleEntity.backEngineImage);
                RequestBody requestBackEngineFile = RequestBody.create(MediaType.parse("multipart/form-data"),backEngineImage);
                backEngine = MultipartBody.Part.createFormData("tail_light",requestBackEngineFile);

            }


            int userId = Integer.parseInt(sharedPreferences.getString(USER_ID,null));

            String vehicleName = vehicleEntity.vehicleName;

            int stockNumber = Integer.parseInt(vehicleEntity.stockNumber);

            Call<SuccessModel> call = apiInterface.uploadVehicle(

                    userId,vehicleName,stockNumber,main,hood,bumper,interior,frontSeat,backSeat,dashboard,headLamps,tailLights,backEngine

            );


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)