Есть ли способ написать объект на amazon s3 с OutputStream в SDK для java?

Я хотел бы написать сериализуемый объект в ведро amazon s3. Однако я не могу найти класс с именем S3ObjectOutputStream, хотя я могу использовать S3ObjectInputStream.

Конечно, я могу записать сериализуемый объект в локальный каталог, а затем загрузить файл на s3, но мне просто интересно, есть ли способ напрямую писать на amazon s3 с помощью OutputStream?


person Weize Sun    schedule 28.11.2017    source источник
comment
Решение см. на stackoverflow.com/a/64508183/1704634. S3OutputStream является оболочкой клиента S3 и автоматически поддерживает многокомпонентную передачу, если размер потока становится слишком большим.   -  person blagerweij    schedule 24.10.2020


Ответы (2)


Я использую эту функцию:

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>
person Merch0    schedule 28.11.2017

Как насчет использования 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-

который позволяет общедоступный PutObjectRequest (String BucketName, String key, ввод InputStream, метаданные ObjectMetadata)

person RoiG    schedule 28.11.2017
comment
Для этого требуется InputStream, что совсем не то, что требуется для вопроса. - person Jon Nichols; 11.02.2021