java 获取上传文件的格式_Java获取IO流(byte流)后,通过RestTemplate把文件以mulitipartfile格式上传...

背景:

后台从其他系统的接口,获取文件流,再把文件流以mulitipartfile调用接口传给其他系统。

通用方法:

把流转成file文件,存放到本地,再读取本地的file文件,调用接口传递。

1.把file文件转成mulitipartfile,再调用接口

常见两种方法 :

MultipartFile multipartFile = new MockMultipartFile(file.getName(), inputStream);

CommonMultipartFile

因为我的是byte流文件,所以最实用用ByteArrayResource

public void loadValue(){

byte [] byteArray = null;//文件流

ByteArrayResource byteArrayResource = new ByteArrayResource(byteArray){

@Override

public String getFilename() {

//重写文件名称

return super.getFilename();

}

};

MultiValueMap dataMap = new LinkedMultiValueMap<>();

dataMap.add("filename", byteArrayResource);// 添加文件到表单

HttpHeaders requestHeaders = new HttpHeaders();

requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity> requestEntity = new HttpEntity>(dataMap, requestHeaders);

restTemplate.postForObject("url", requestEntity, JSONObject.class);

}

以上方法 可以正确把文件上传过去。但是会碰到一个新问题。文件名是中文乱码。

正常来说,文件名称已经重写,不会乱码。乱码的点 应该在RestTemplate上。查看RestTemplate的配置

public RestTemplate resttemplate(){

RestTemplate restTemplate = new RestTemplate();

List> converters = restTemplate.getMessageConverters();

for (HttpMessageConverter> httpMessageConverter : converters) {

if (httpMessageConverter instanceof StringHttpMessageConverter) {

((StringHttpMessageConverter)httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));

}

}

return restTemplate;

}

只是string的编码定义。查看List>内部的编码 ,发现了AllEncompassingFormHttpMessageConverter中包含multipartCharset字段。猜测需要重写

public RestTemplate resttemplate(){

RestTemplate restTemplate = new RestTemplate();

List> converters = restTemplate.getMessageConverters();

for (HttpMessageConverter> httpMessageConverter : converters) {

if (httpMessageConverter instanceof StringHttpMessageConverter) {

((StringHttpMessageConverter)httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));

}

if (httpMessageConverter instanceof FormHttpMessageConverter) {

((FormHttpMessageConverter)httpMessageConverter).setMultipartCharset(Charset.forName("UTF-8"));

}

}

return restTemplate;

}

如图,成功解决文件名乱码问题

另:额外要增加 javax.mail包依赖

本文地址:https://blog.csdn.net/c20061924/article/details/112003557

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值