检查 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
。我尝试使用 800KB
和 1.3MB
文件
HttpServletRequest.getContentLength()
显示上传的正确字节数
我在这里错过了什么?
InputStream.read(字节[])
不保证阅读全部内容。来自 javadoc:
从输入流中读取一定数量的字节并将它们存储到缓冲区数组 b 中。实际读取的字节数作为整数返回。此方法会阻塞,直到输入数据可用、检测到文件结尾或引发异常。
第一次调用好像只有8181字节可用。您需要继续读取直到方法 returns -1 并将读取的所有字节合并。
我有一个奇怪的问题:
我的 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()
显示上传的正确字节数
我在这里错过了什么?
InputStream.read(字节[])
不保证阅读全部内容。来自 javadoc:
从输入流中读取一定数量的字节并将它们存储到缓冲区数组 b 中。实际读取的字节数作为整数返回。此方法会阻塞,直到输入数据可用、检测到文件结尾或引发异常。
第一次调用好像只有8181字节可用。您需要继续读取直到方法 returns -1 并将读取的所有字节合并。