springboot文件上传java文件中转工具类[笔记] ╰+哭是因爲堅強的太久メ 2022-10-18 11:24 36阅读 0赞 # java文件上传中转工具类 # ## springboot项目,版本2.2.6 ## <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent> ## 依赖jar ## <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> </dependency> ## 工具类 ## import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileInputStream; import java.nio.charset.StandardCharsets; import java.util.*; /** * @author vick * @version 1.0 * <span>create at 2021/6/5 10:40</span> */ public class FileUtils { /** * 单文件中转上传 * @param file 文件 * @param remoteUrl 请求完整url * @param params 额外参数,可为空 */ public static String uploadMultipartFile(MultipartFile file, String remoteUrl, Map<String, Object> params) { List<MultipartFile> files = new ArrayList<>(); files.add(file); return uploadMultipartFile(files, remoteUrl, params); } /** * 多文件中转请求 * <p>特别注意files,接受控制层用files参数名接收</p> * @param files 文件 * @param remoteUrl 请求完整url * @param params 额外参数,可为空 */ public static String uploadMultipartFile(List<MultipartFile> files, String remoteUrl, Map<String, Object> params) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(remoteUrl); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); for (MultipartFile file : files) { String fileName = file.getOriginalFilename(); builder.addBinaryBody("files", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName); builder.addTextBody("fileName", fileName); } buildExtParams(params, builder); HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); HttpEntity responseEntity = response.getEntity(); return EntityUtils.toString(responseEntity, StandardCharsets.UTF_8); } catch (Exception e) { throw new RuntimeException("upload file has error " + e.getMessage()); } } /** * 单个中转文件请求 * @param file 文件 * @param remoteUrl 请求完整url * @param params 额外参数,可为空 */ public static String uploadFile(File file, String remoteUrl, Map<String, Object> params) { List<File> files = new ArrayList<>(); files.add(file); return uploadFile(files, remoteUrl, params); } /** * 中转文件请求 * @param files 文件 * @param remoteUrl 请求完整url * @param params 额外参数,可为空 */ public static String uploadFile(List<File> files, String remoteUrl, Map<String, Object> params) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(remoteUrl); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); for (File file : files) { builder.addBinaryBody("files", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, file.getName()); builder.addTextBody("fileName", file.getName()); } buildExtParams(params, builder); HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); HttpEntity responseEntity = response.getEntity(); return EntityUtils.toString(responseEntity, StandardCharsets.UTF_8); } catch (Exception e) { throw new RuntimeException("upload file has error " + e.getMessage()); } } /** * 构建额外的参数,例如除了文件外,添加其他参数,用户ID(userId)等 * @param params 参数 * @param builder 文件上传实体构建器 */ private static void buildExtParams(Map<String, Object> params, MultipartEntityBuilder builder) { if (CollectionUtils.notEmpty(params)) { params.forEach((k, v) -> { builder.addTextBody(k, Objects.isNull(v) ? null : String.valueOf(v)); }); } } }
还没有评论,来说两句吧...