检查 InputStream 大小的问题

Issue with checking InputStream size

我有一个奇怪的问题:

我的 dropwizard API 处理上传的文件并将其保存为 JPEG 图片

上传的文件被读取为 InputStream

FormDataBodyPart fileBody 使用 @FormDataParam("file")

读取
InputStream imageStream = fileBody.getValueAs(InputStream.class);
final int maxSize = 102400;
final byte[] bytes = new byte[maxSize + 1];
int totalBytes = this.imageStream.read(bytes);
System.out.println("totalBytes:"+totalBytes);

无论上传文件的原始大小如何,返回的 totalBytes 值永远不会大于 8181。我尝试使用 800KB1.3MB 文件

HttpServletRequest.getContentLength() 显示上传的正确字节数

我在这里错过了什么?

InputStream.read(字节[])

不保证阅读全部内容。来自 javadoc:

从输入流中读取一定数量的字节并将它们存储到缓冲区数组 b 中。实际读取的字节数作为整数返回。此方法会阻塞,直到输入数据可用、检测到文件结尾或引发异常。

第一次调用好像只有8181字节可用。您需要继续读取直到方法 returns -1 并将读取的所有字节合并。