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.*;
public class FileUtils {
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);
}
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());
}
}
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);
}
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());
}
}
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));
});
}
}
}