需要将文件上传接口的请求通过resttemplate转发到另一个后台接口上,采用resttemplate进行post 请求获取。
文件上传接口
@PostMapping("/xxxx/fileUpload")
String fileUpload(@RequestParam(value = "files") MultipartFile[] multipartFiles)
两种方式 一种是上传文件先本地临时存储,
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 多部件表单体
MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
multipartBodyBuilder.part("type", type);
for (MultipartFile multipartFile :files
) {
String path = "G:\\tmp_pic" + File.separator + multipartFile.getOriginalFilename();
File file = FileUtils.multiPartFileToFile(path, multipartFile);
FileSystemResource fileSystemResource = new FileSystemResource(file);
multipartBodyBuilder.part("files", fileSystemResource);
}
MultiValueMap<String, HttpEntity<?>> multipartBody = multipartBodyBuilder.build();
HttpEntity datas = new HttpEntity<>(multipartBody, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(basePath+"/xxxx/fileUpload", datas, String.class);
return responseEntity.getBody();
public class FileUtils {
public static File multiPartFileToFile(String path, MultipartFile multiFile) throws IOException {
File file=new File(path);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
multiFile.transferTo(file);
return file;
}
}
二是通过将MultipartFile 转化ByteArrayResource
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 多部件表单体
MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
multipartBodyBuilder.part("type", type);
for(MultipartFile file : files) {
ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
}
};
multipartBodyBuilder.part("files", resource);
}
MultiValueMap<String, HttpEntity<?>> multipartBody = multipartBodyBuilder.build();
HttpEntity datas = new HttpEntity<>(multipartBody, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(basePath+"/xxxx/fileUpload", datas, String.class);
return responseEntity.getBody();
关于文件下载采用已知可访问url的方式实现
@PostMapping("/xxx/downLoadRemateFile")
public void downLoadRemateFile(String url, HttpServletResponse response) {
//当传入的url返回不为空的时候,读取数据
URLConnection connection = null;
InputStream input;
try{
String ContentType=null;
//设置请求的头信息
URL urlInfo = new URL(url);
connection = urlInfo.openConnection();
//设置头信息
connection.addRequestProperty("Host", urlInfo.getHost());
connection.addRequestProperty("Connection", "keep-alive");
//强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证。
connection.addRequestProperty("Cache-Control", "no-cache");
//使用url的Host来标记来源
connection.addRequestProperty("Referer", "http://"+urlInfo.getHost());
//表示用户不愿意目标站点追踪用户个人信息。
connection.addRequestProperty("DNT", "1");
//强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证。
connection.addRequestProperty("Pragma", "no-cache");
connection.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36");
connection.connect();
//获取请求回来的信息
input = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
byte[] buf = new byte[1024];
int length = bufferedInputStream.read(buf);
ServletOutputStream out = response.getOutputStream();
while (-1 != length) {
System.out.println(length);
out.write(buf, 0,length);
length = bufferedInputStream.read(buf);
}
out.flush();
out.close();
bufferedInputStream.close();
}catch(Exception e){
e.printStackTrace();
}finally {
}
}