客户端使用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
加上名字之后果然就没有报错了,顺利上传并跟踪更新了进度条。