【问题标题】:No content length specified warning appearing when I try to upload an object in s3 bucket with a java code当我尝试使用 java 代码在 s3 存储桶中上传对象时,没有出现指定内容长度的警告
【发布时间】:2021-10-31 14:56:03
【问题描述】:

当我尝试上传任何大小以 MB 为单位的对象时,我收到此警告“警告:未为流数据指定内容长度。流内容将在内存中缓冲,并可能导致内存不足错误。”然后我的代码突然结束。我尝试将内容保存在临时文件中,然后在分段上传的帮助下上传,但它似乎也不起作用。

InputStream inputStream = part.getInputStream();
                    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                            .withRegion("eu-central-1")
                            .build();
                    ObjectMetadata metadata = new ObjectMetadata();
                    metadata.setContentType(part.getContentType());
                    logger.log("setting metadata");

                    PutObjectRequest request = new PutObjectRequest(bucket, fileName, inputStream, metadata);
                    s3Client.putObject(request);
                    logger.log("putting in S3 bucket");

【问题讨论】:

标签: java amazon-web-services amazon-s3 inputstream


【解决方案1】:

正如其他问题中提到的,使用字节数组获取内容长度确实有助于警告,但如果对象的大小大于 1MB,则 lambda 将结束。我不得不将 lambda 超时更改为 2 分钟,因为当对象大于 1 MB 时,传输不会在 15 秒内完成。分享我的代码的 sn-p 以防有人偶然发现这个问题。

ObjectMetadata metadata = new ObjectMetadata();
        byte[] bytes = IOUtils.toByteArray(inputStream);
        metadata.setContentLength(bytes.length);
        metadata.setContentType(part.getContentType());

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2016-11-01
    • 2020-07-05
    • 2018-01-07
    • 2014-04-02
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多