即使我使用的是高级多部分,我仍然在控制台中收到警告:
WARN - com.amazonaws.services.s3.AmazonS3Client - No content length specified for stream data. Stream contents will be buffered in memory and could result in out of memory errors.
这就是我使用高级分段上传的方式,就像这里一样:https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-upload-object.html
val tm: TransferManager = TransferManagerBuilder
.standard()
.withS3Client(s3Client)
.withMultipartUploadThreshold(5248000)
.build();
val metadata = new ObjectMetadata()
metadata.setContentType(mimeType)
val request = new PutObjectRequest(bucketName, key, inputStream, metadata)
val upload = tm.upload(request)
upload.waitForCompletion()
5248000是5MB,我尝试上传比这大得多的文件,所以它应该使用多部分策略,正如它在with MultipartUploadThreshold
文档中所说:
设置何时使用分段上传的大小阈值(以字节为单位)。超过此大小的上传将自动使用分段上传策略,而小于此阈值的上传将使用单个连接来上传整个对象。
为什么它仍然发出这个警告?
AWS SDK for Java的文档在ObjectMetadata中提到了这一点:
将对象上传到S3时,此字段是必需的,但是当直接处理文件时,Amazon Web Services S3 Java客户端会自动设置它。当直接从流上传时,如果可能,设置该字段。否则,客户端必须缓冲整个流,以便在将数据发送到亚马逊S3之前计算内容长度。
换句话说,您需要显式调用元数据。在构造
。如果不这样做,AWS SDK将需要在ram中缓冲整个流,这可能会耗尽较大对象的内存,从而触发您看到的警告。PutObjectRequest
对象之前,使用文件或流大小设置ContentLength(x)
我有下面的代码发送一个多部分/表单数据请求。 在我的RestClient类中,我使用下面几行代码使用JAX-RS客户机对象发送POST请求 我使用Wiremock检查了HTTP请求主体,如下所示: 我想知道请求负载中的内容长度标头是如何丢失的。有没有办法设置请求的内容长度标头? 请帮帮我。
我突然开始看到这条警告消息被记录下来,尽管底层aws库的使用或没有任何变化。我一直用的是1.6.9.1版的aws-java-sdk 没有为流数据指定内容长度。流内容将在内存中缓冲,可能会导致内存不足错误。 文件上传方式如下: 我怀疑我可能看到了这一点,因为我没有在ObjectMetadata对象上设置内容长度,但这就是之前的情况,并且没有生成警告。 有人知道为什么这个警告信息会突然出现吗? 谢谢
我需要上传一个更大的文件到 AWS 冰川的评估。由于大小,我无法在一个请求中执行此操作,因此我需要将其拆分为较小的部分并使用分段上传。 Boto3是否包含一个方法,该方法获取一个大文件,拆分并逐个上传它的部分?正如我所见Java客户端有这样的方法(取自AWS文档): 高级API提供了一种方法,您可以使用该方法上传任何大小的存档。根据您要上传的文件,该方法可以在单个操作中上传存档,也可以使用Amaz
使用简单的按预期设置所有标头。 什么样的问题可能导致这种行为?
当我试图发布一些数据,超过php.inipost_max_size设置我得到这个错误: 警告:未知:第0行中X字节的帖子内容长度超过Y字节的限制。 我不想增加post_max_size,我只想能够关闭警告,并告诉帖子数据是否超过post_max_size。我试图用error_reporting打开警告,但是因为警告在第0行,所以没有帮助。
问题内容: Redux发出警告: 减速器的唯一操作是以下操作: 如果我使用[… spread],如何改变状态? 问题答案: 在这里类似。它创建一个新的数组,但对象 的 数组与共享。如果要对其进行突变,则需要制作每个项目的副本。 您可以使用进行此操作,类似于您对返回值所做的操作: 或者(如您在自己的答案中所建议),您可以使用对象扩展表示法: