当前位置: 首页 > 知识库问答 >
问题:

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

狄宜然
2023-03-14

我突然开始看到这条警告消息被记录下来,尽管底层aws库的使用或没有任何变化。我一直用的是1.6.9.1版的aws-java-sdk

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

文件上传方式如下:

client.putObject(bucketName, key, new ByteArrayInputStream(data), new ObjectMetadata())

我怀疑我可能看到了这一点,因为我没有在ObjectMetadata对象上设置内容长度,但这就是之前的情况,并且没有生成警告。

有人知道为什么这个警告信息会突然出现吗?

谢谢

共有2个答案

浦德明
2023-03-14
public void s3PutOjectFromStreamCompliant(AmazonS3 s3Client, File inputFile) throws FileNotFoundException {
String s3Bucket = "sample-bucket";
FileInputStream inputStream = null;
try {
    inputStream = new FileInputStream(inputFile);
    ObjectMetadata metadata = new ObjectMetadata();
    // Compliant: specifies the content length of the stream.
    metadata.setContentLength(inputFile.length());
    s3Client.putObject(s3Bucket, inputFile.getName(), inputStream, metadata);
} finally {
    IOUtils.closeQuietly(inputStream, null);
}

}

葛修真
2023-03-14

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

上传文件时,AWS S3 Java 客户端将尝试确定正确的内容类型(如果尚未设置)。用户负责确保在上传流时设置合适的内容类型。如果未提供内容类型且无法由文件名确定,则将使用默认内容类型“应用程序/八位字节流”。

有关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());
 类似资料:
  • 当我试图发布一些数据,超过php.inipost_max_size设置我得到这个错误: 警告:未知:第0行中X字节的帖子内容长度超过Y字节的限制。 我不想增加post_max_size,我只想能够关闭警告,并告诉帖子数据是否超过post_max_size。我试图用error_reporting打开警告,但是因为警告在第0行,所以没有帮助。

  • 我们有一个波束/数据流管道(使用数据流SDK 2.0.0-beta3 但是,我们正在设置 参数,我们可以看到所有二进制文件/jar 等都已上传到我们在 参数中指定的存储桶。 但是,Beam/Dataflow 随后会在我们项目的 GCS 中创建以下僵尸存储桶: 为什么会发生这种情况,如果我们清楚地设置参数?

  • 我收到一条PHP警告,上面说: PHP警告:POST内容长度2290848字节超过第0行未知中2097152字节的限制, 以下是我的配置: 在 /etc/php.ini 在/etc/httpd/conf/httpd中。形态 从上面看,我的帖子最大尺寸应该是2.5米。为什么在2M(2097152字节)的下限触发此警告?

  • 即使我使用的是高级多部分,我仍然在控制台中收到警告: 这就是我使用高级分段上传的方式,就像这里一样:https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-upload-object.html 5248000是5MB,我尝试上传比这大得多的文件,所以它应该使用多部分策略,正如它在文档中所说: 设置何时使用分段上传的大小阈值(以字节为单位)

  • 问题内容: 用户在我的网站上上传图片时遇到了很多问题。 他们最多可以上传6张图片 最初,我不得不将php.ini中的值更改为: 我不得不更改为这个,因为出现了各种错误,例如内存不足,超出最大发布数等。 一切正常,直到我检查了包含以下内容的错误日志: 如果我将帖子的最大值改回前8M,则会收到如下消息: 有什么想法我要去哪里吗? 问题答案: 在某些32位系统上,PHP将采用类似或的内存设置,并且通过不

  • 为什么我在数据中没有定义。ajax中的长度。成功了? 以下是代码,为了简洁起见,删除了一些部分: