Retrofit同时上传多个文件和表单字段的实现方法

59 阅读1分钟
接口定义
public interface FileUploadService {
    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadMultiple(
        @Part List<MultipartBody.Part> files,
        @PartMap Map<String, RequestBody> params
    );
}
`
//具体实现类-上传工具类
`public class UploadUtils {
    public static void uploadFiles(List<File> files, Map<String, String> formFields) {
        // 准备文件部分
        List<MultipartBody.Part> fileParts = new ArrayList<>();
        for (File file : files) {
            RequestBody requestFile = RequestBody.create(
                MediaType.parse("multipart/form-data"), file);
            MultipartBody.Part part = MultipartBody.Part.createFormData(
                "files", file.getName(), requestFile);
            fileParts.add(part);
        }
        
        // 准备表单字段
        Map<String, RequestBody> params = new HashMap<>();
        for (Map.Entry<String, String> entry : formFields.entrySet()) {
            params.put(entry.getKey(), 
                RequestBody.create(MediaType.parse("text/plain"), entry.getValue()));
        }
        
        // 创建服务实例并上传
        FileUploadService service = RetrofitClient.getService();
        Call<ResponseBody> call = service.uploadMultiple(fileParts, params);
        call.enqueue(new Callback<ResponseBody>() {
            // 处理回调
        });
    }
}
`

```