【问题标题】:Is there any way to write an object to amazon s3 with OutputStream in SDK for java?有没有办法在 SDK for java 中使用 OutputStream 将对象写入亚马逊 s3?
【发布时间】:2018-05-12 03:08:39
【问题描述】:

我想将一个可序列化的对象写入亚马逊 s3 的存储桶中。但是,即使我可以使用 S3ObjectInputStream,我也找不到名为 S3ObjectOutputStream 的类。

当然我可以将可序列化对象写入本地目录,然后将文件上传到s3,但我只是想知道有没有办法直接使用OutputStream 写入亚马逊s3?

【问题讨论】:

  • 请参阅stackoverflow.com/a/64508183/1704634 以获得解决方案。 S3OutputStream 包装了一个 S3 客户端,如果流大小变得太大,它会自动支持多部分传输。

标签: java amazon-s3


【解决方案1】:

我使用这个功能:

public String upload(String name, InputStream is, String contentType) throws FileLoadException {

    try {

        log.debug("Loading file {} into S3 Bucket {}", name, bucketName);
        AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();

        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentType(contentType);
        objectMetadata.setCacheControl("public, max-age=31536000");

        String filename = String.format("%s/%s", s3Folder, name);

        amazonS3.putObject(new PutObjectRequest(bucketName, filename, is, objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));

        log.debug("Image {} upload into  S3 Bucket {}", name, bucketName);
        return s3BaseUrl + filename;
    } catch (Exception e) {
       //handle
    }
}

我添加了这个依赖:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
    </dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-bom</artifactId>
            <version>1.11.194</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

【讨论】:

    【解决方案2】:

    使用 PutObjectRequest 怎么样? 看看http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/PutObjectRequest.html#PutObjectRequest-java.lang.String-java.lang.String-java.io.InputStream-com.amazonaws.services.s3.model.ObjectMetadata-

    这允许 public PutObjectRequest(String bucketName, 字符串键, InputStream 输入, ObjectMetadata 元数据)

    【讨论】:

    • 这需要一个 InputStream,这根本不是问题所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多