版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36702228/article/details/84797971
需要引入以下jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.3</version> </dependency>
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
public class FileUpload{
private final String thirdUrl = "http://12.0.0.1/v1/api/test";
private final String[] File_Types = {"doc","docx","xlsx","xls","pptx"};//限制文件传输类型
private final int limitSize = 10;//限制文件传输大小
public void send(String title, String content, List<File> fileList){
List<MultipartFile> multiFileList = new ArrayList<>();
long totalSize = 0;
for(File file : fileList){
String fileFullName = file.getName();
String[] fileNameParts = fileFullName.split("\\.");
if(!Arrays.asList(File_Types).contains(fileNameParts[1])){
logger.warn("========== file type is {}, cannot be transferred to the 3rd part", fileNameParts[1]);
continue;
}
try {
InputStream inputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile(fileNameParts[0], fileFullName, null,inputStream);
totalSize += multipartFile.getSize();
if ((totalSize / 1024 / 1024) > limitSize){
logger.warn("========= the file size must be less than 10MB!");
return;
}
multiFileList.add(multipartFile);
} catch (Exception e) {
logger.error("获取附件失败:", e);
return;
}
}
Map<String,Object> params = new HashMap<>();
params.put("title", title);
params.put("content", content);
params.put("multiFiles", multiFileList);
try {
HttpMultiPartFileUtil.httpPostRequest(thirdUrl, "files", params, 5000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
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.protocol.HTTP;
import org.springframework.web.multipart.MultipartFile;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class HttpMultiPartFileUtil {
public static Map<String, String> httpPostRequest(String url, String fileParName,
Map<String, Object> params, int timeout) {
Map<String, String> resultMap = new HashMap<String, String>();
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = "";
try {
HttpPost httpPost = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
List<MultipartFile> multipartFiles = (List<MultipartFile>)params.get("multiFiles");
params.remove("multiFiles");
String fileName = null;
MultipartFile multipartFile = null;
for (int i = 0; i < multipartFiles.size(); i++) {
multipartFile = multipartFiles.get(i);
fileName = multipartFile.getOriginalFilename();
builder.addBinaryBody(fileParName, multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
}
//决中文乱码
ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
for (Map.Entry<String, Object> entry : params.entrySet()) {
if(entry.getValue() == null)
continue;
// 类似浏览器表单提交,对应input的name和value
builder.addTextBody(entry.getKey(), entry.getValue().toString(), contentType);
}
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);// 执行提交
// 设置连接超时时间
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
httpPost.setConfig(requestConfig);
HttpEntity responseEntity = response.getEntity();
resultMap.put("code", String.valueOf(response.getStatusLine().getStatusCode()));
resultMap.put("data", IOUtils.toString(responseEntity.getContent()));
} catch (Exception e) {
resultMap.put("code", "error");
resultMap.put("data", "HTTP请求出现异常: " + e.getMessage());
Writer w = new StringWriter();
e.printStackTrace(new PrintWriter(w));
log.error("HTTP请求出现异常: " + w.toString());
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultMap;
}
}
参考:https://blog.csdn.net/u010826617/article/details/80236226