S3警告:“未为流数据指定内容长度”

vau*_*lle 5 amazon-s3 amazon-web-services aws-sdk

我突然开始看到记录此警告消息,即使基础aws lib的使用或上没有任何变化。我一直在使用aws-java-sdk 1.6.9.1版

没有为流数据指定内容长度。流内容将被缓冲在内存中,并可能导致内存不足错误。

这是文件上传的方式:

client.putObject(bucketName, key, new ByteArrayInputStream(data), new ObjectMetadata())
Run Code Online (Sandbox Code Playgroud)

我怀疑我可能会看到这种情况,因为我没有在ObjectMetadata对象上设置内容长度,但是那是以前的样子,并且没有生成警告。

是否有人对为什么突然出现此警告消息有任何见解?

谢谢!

小智 9

我知道这已经有一段时间了,但我今天不得不处理这个问题,并在文档中找到了这个解释

上传文件时,AWS S3 Java 客户端将尝试确定正确的内容类型(如果尚未设置)。用户有责任确保在上传流时设置合适的内容类型。如果未提供内容类型并且无法通过文件名确定,则将使用默认内容类型“application/octet-stream”。

有关 Content-Type 标头的更多信息,请参阅 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17

就我而言,我必须缓冲流,所以我使用了类似的东西(来自参考)。

ByteBuffer buffer = new ByteBuffer(...)
...
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(buffer.limit());
Run Code Online (Sandbox Code Playgroud)

  • 您在文档中的引用是关于内容类型的,而您的答案的其余部分是关于内容长度的。 (28认同)
  • 这仍然使用 ByteBuffer 将整个文件加载到内存中。与亚马逊将整个代码加载到内存中相比,拥有自己的代码并没有任何改进。 (5认同)