java - 如何将 Java OutputStream 上传到 AWS S3

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

我在内存中创建 PDF 文档作为 OutputStream。这些应该上传到 S3。我的问题是无法直接从 OutputStream 创建 PutObjectRequest(根据 this thread in the AWS dev forum )。我在 Dropwizard 中使用 aws-java-sdk-s3 v1.10.8应用程序。

目前我能看到的两个解决方法是:

  1. OutputStream 复制到 InputStream 并接受使用两倍的 RAM。
  2. OutputStream 通过管道传输到 InputStream 并接受额外线程的开销(参见 this answer )

如果我找不到更好的解决方案,我会选择 #1,因为在我的设置中,看起来我比线程/CPU 更容易负担得起额外的内存。

有没有其他可能更有效的方法来实现我目前忽略的这一点?

编辑: 我的 OutputStreamByteArrayOutputStream

最佳答案

我通过继承 ConvertibleOutputStream 解决了这个问题:

public class ConvertibleOutputStream extends ByteArrayOutputStream {
    //Craetes InputStream without actually copying the buffer and using up mem for that.
    public InputStream toInputStream(){
        return new ByteArrayInputStream(buf, 0, count);
    }
}

关于java - 如何将 Java OutputStream 上传到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805518/

相关文章:

java - JPA 查询针对不在查询中的列抛出 'not found' 错误

powershell - AWS Elasticbeanstalk ebextensions 服务器重启错误 "Error occurred during build: [Errno 4] Interrupted function call"

amazon-web-services - aws云形成为github添加公钥

Django + AWS S3 存储桶 : Authenticated Access to S3 Bucket

amazon-web-services - s3api put-bucket-notification-configuration 删除现有事件

docker - 在 docker 容器之间连接到 scality/s3 服务器

java - SQL 注入(inject)通常如何在 Spring/Hibernate 设置中停止

java - 正则表达式匹配精确的子字符串java

java - 以 InputStream 格式将文本文件从 .Net http 客户端上传到 Java REST API

linux - AWS 根卷未启动