我有一个奇怪的问题:
我的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
,无论上传文件的原始大小如何。我尝试使用800KB
和1.3MB
个文件
HttpServletRequest.getContentLength()
显示上传的正确字节数
我在这里错过了什么?
答案 0 :(得分:0)
InputStream.read(字节[])
不保证能够阅读完整内容。来自javadoc:
从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。
第一次调用似乎只有8181个字节可用。您需要继续读取,直到该方法返回-1并组合读取的所有字节。