检查InputStream大小的问题

时间:2016-08-11 20:24:30

标签: java inputstream multipartform-data dropwizard

我有一个奇怪的问题:

我的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()显示上传的正确字节数

我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

InputStream.read(字节[])

不保证能够阅读完整内容。来自javadoc:

从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。

第一次调用似乎只有8181个字节可用。您需要继续读取,直到该方法返回-1并组合读取的所有字节。