java restTemplate 上传文件流
刚开始的百度发现全是上传本地文件的,项目代码都是先从前端保存到服务器,服务器再进行上传的,很是麻烦
上传文件流
- 首先设置请求头
multipart/form-data
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
- 设置上传文件参数
MultiValueMap<String,Object> param = new LinkedMultiValueMap<>()
- 设置文件流
org.springframework.core.io.Resource resource = new InputStreamResource(in){
@Override
public long contentLength() throws IOException {
long size = in.available();
return size;
}
@Override
public String getFilename(){
return file.getFileName();
}
};
resource 需要重写方法 一个是name 一个是大小
- 添加参数
param.add(“files”,resource);
如果有多个文件就多添加几次 param.add(“files”,resource);
- 最后开始执行接口
String retStr = restTemplate.postForObject(buff.toString(),
new HttpEntity< MultiValueMap<String,Object> >(param, headers),
String.class);
最后提供下完整代码
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String,Object> param = new LinkedMultiValueMap<>();
InputStream in = null; //这里应该是文件流
String fileName = "test.txt";
org.springframework.core.io.Resource resource = new InputStreamResource(in){
@Override
public long contentLength() throws IOException {
long size = in.available();
return size;
}
@Override
public String getFilename(){
return fileName;
}
};
param.add("files",resource);
String retStr = restTemplate.postForObject("接口地址", new HttpEntity< MultiValueMap<String,Object> >(param, headers), String.class);