package com.ydl.ydlnet.client.upload; import com.ydl.ydlnet.builder.factory.ApiFactory; import io.reactivex.Observable; import okhttp3.*; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Created by haorui on 2019-09-02 . * Des: 上传单独 retrofit */ public class UploadHelper { /** * 上传一张图片 * * @param uploadUrl 上传图片的服务器url * @param filePath 图片路径 * @return Observable */ public static Observable<ResponseBody> uploadImage(String uploadUrl, String filePath) { List<String> filePaths = new ArrayList<>(); filePaths.add(filePath); return uploadFilesWithParams(uploadUrl, "uploaded_file", null, filePaths); } /** * 只上传图片 * * @param uploadUrl 上传图片的服务器url * @param filePaths 图片路径 * @return Observable */ public static Observable<ResponseBody> uploadImages(String uploadUrl, List<String> filePaths) { return uploadFilesWithParams(uploadUrl, "uploaded_file", null, filePaths); } /** * 图片和参数同时上传的请求 * * @param uploadUrl 上传图片的服务器url * @param fileName 后台协定的接受图片的name(没特殊要求就可以随便写) * @param paramsMap 普通参数 * @param filePaths 图片路径 * @return Observable */ public static Observable<ResponseBody> uploadFilesWithParams(String uploadUrl, String fileName, Map<String, Object> paramsMap, List<String> filePaths) { MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM); if (null != paramsMap) { for (String key : paramsMap.keySet()) { builder.addFormDataPart(key, (String) paramsMap.get(key)); } } for (int i = 0; i < filePaths.size(); i++) { File file = new File(filePaths.get(i)); RequestBody imageBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); //"fileName"+i 后台接收图片流的参数名 builder.addFormDataPart(fileName, file.getName(), imageBody); } List<MultipartBody.Part> parts = builder.build().parts(); OkHttpClient httpClient = new OkHttpClient.Builder().build(); return ApiFactory.getInstance() .createApi(UploadFileApi.class,httpClient) .uploadFiles(uploadUrl, parts); } }