报错如下
java.lang.IllegalArgumentException: No filename
at org.springframework.util.Assert.hasText(Assert.java:284)
at org.springframework.http.ContentDisposition$BuilderImpl.filename(ContentDisposition.java:594)
at org.springframework.http.HttpHeaders.setContentDispositionFormData(HttpHeaders.java:865)
at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:525)
at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:505)
at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:485)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:362)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:156)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:952)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:737)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:674)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:449)
报错部分的实现代码如下
try {
List<ByteArrayResource> resources = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
MultipartFile f = files[i];
ByteArrayResource fileAsResource = new ByteArrayResource(f.getBytes()) {
@Override
public String getFilename() {
return f.getOriginalFilename();
}
@Override
public long contentLength() {
return f.getSize();
}
};
resources.add(fileAsResource);
}
param.addAll("files", resources);
} catch (Exception e) {
e.printStackTrace();
}
如果文件资源都正常的情况下,上面的代码是不会出现问题的,但是如果获取的MultiPartFile获取不到文件名字的时候,即f.getOriginalFilename()
为null或者空字符串的时候,上面的代码就会报错。原因如下,在源码中有设置文件名的一个地方
修改后的代码如下,只要判一下空即可,为空就手动赋值文件名
try {
List<ByteArrayResource> resources = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
MultipartFile f = files[i];
ByteArrayResource fileAsResource = new ByteArrayResource(f.getBytes()) {
@Override
public String getFilename() {
/*if (StringUtils.isBlank(f.getOriginalFilename())) {
return SnowFlake.getId() + ".jpg";
}*/
return f.getOriginalFilename();
}
@Override
public long contentLength() {
return f.getSize();
}
};
resources.add(fileAsResource);
}
param.addAll("files", resources);
} catch (Exception e) {
e.printStackTrace();
}
}