使用RestTemplate 模拟上传文件的时候,不能在接收端接收到文件的字节。
/**
* 上传文件
*
* @param name
* @param bytes
* @return
*/
public Long updateBytes(String name, byte[] bytes) throws XyidcException {
//设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setConnection("Keep-Alive");
headers.setCacheControl("no-cache");
//设置请求体,注意是LinkedMultiValueMap
ByteArrayResource fileSystemResource = new ByteArrayResource(bytes){
@Override
public String getFilename() {
return name;
}
};
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("file", fileSystemResource);
form.add("filename", name);
//用HttpEntity封装整个请求报文
HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
String s = restTemplate.postForObject("http://" + apiServerName + "/" + apiServerName + "/xyidc-basic/v1/file/upload", files, String.class);
JSONObject result = JSONObject.parseObject(s);
List<FileUploadRespVo> fileUploadRespVos = Lists.newArrayList();
if (SystemEnums.SUCCESS.getCode().equals(result.getString("code"))) {
JSONArray datas = result.getJSONArray("data");
for (Object data : datas) {
fileUploadRespVos.add(JSONObject.parseObject(JSONObject.toJSONString(data), FileUploadRespVo.class));
}
}
if (CollectionUtils.isEmpty(fileUploadRespVos)) {
logger.error(s);
throw new XyidcException("文件上传报错了,请查看一下");
}
return fileUploadRespVos.get(0).getFileId();
}
需要重写ByteArrayResource的GetFilename接口