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);
通过restTemplate,设置multipart/form-data请求头,利用InputStreamResource处理文件流,重写contentLength和getFilename方法,将文件流作为参数发送到接口进行文件上传。
1401

被折叠的 条评论
为什么被折叠?



