客户端使用httpclient上传文件到服务端由spring mvc接收
本来用addBinaryBody传入File参数是正常运作的
然后为了实现进度条跟踪而改为传入InputStream参数就报错了
错误:
Required request part '' is not present
The request sent by the client was syntactically incorrect.
由于使用了Commons.io的CountingInputStream,还一度认为是inputstream不兼容的问题
后来甚至尝试直接覆写InputStreamBody的write方法来手动跟踪进度,结果还是同样的错误,
在阅读源码的时候才注意到
public MultipartEntityBuilder addBinaryBody(final String name, final InputStream stream) {
return addBinaryBody(name, stream, ContentType.DEFAULT_BINARY, null);
}最后那个参数直接传入了空而原来传入File的方法,则根据文件获取了名字
public MultipartEntityBuilder addBinaryBody(
final String name, final File file) {
return addBinaryBody(name, file, ContentType.DEFAULT_BINARY, file != null ? file.getName() : null);
}改为使用public MultipartEntityBuilder addBinaryBody(
final String name, final InputStream stream, final ContentType contentType,
final String filename)
final String name, final InputStream stream, final ContentType contentType,
final String filename)
方法手动添加filename
加上名字之后果然就没有报错了,顺利上传并跟踪更新了进度条。
本文介绍了解决使用SpringMVC通过HttpClient上传文件时出现的“Required request part 'is not present’”错误的方法。作者从尝试使用InputStream代替File进行上传开始,最终通过手动指定文件名解决了问题,并成功实现了文件上传进度的跟踪。
340

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



