【问题标题】:Issue with checking InputStream size [duplicate]检查 InputStream 大小的问题 [重复]
【发布时间】:2016-12-18 17:34:23
【问题描述】:

我有一个奇怪的问题:

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

我在这里错过了什么?

【问题讨论】:

  • 我只想指出幻数8181 有一些可能的解释:8181*8=65 448 ~ 65 536 = 2^16 -> 16 bits = 2 bytes。我可能错了。

标签: java inputstream multipartform-data dropwizard


【解决方案1】:

InputStream.read(byte[])

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
相关资源
最近更新 更多