Apakah ada cara untuk menulis objek ke amazon s3 dengan OutputStream di SDK untuk java?

Saya ingin menulis objek serial ke dalam ember amazon s3. Namun saya tidak dapat menemukan kelas bernama S3ObjectOutputStream meskipun saya dapat menggunakan S3ObjectInputStream.

Tentu saja saya dapat menulis objek serial ke direktori lokal dan kemudian mengunggah file ke s3, tapi saya hanya ingin tahu apakah ada cara untuk menulis ke amazon s3 dengan OutputStream secara langsung?


person Weize Sun    schedule 28.11.2017    source sumber
comment
Lihat stackoverflow.com/a/64508183/1704634 untuk mengetahui solusinya. S3OutputStream membungkus cilent S3, dan secara otomatis mendukung transfer multibagian jika ukuran aliran menjadi terlalu besar.   -  person blagerweij    schedule 24.10.2020


Jawaban (2)


Saya menggunakan fungsi ini:

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
    }
}

Saya menambahkan ketergantungan ini:

    <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

Bagaimana kalau menggunakan PutObjectRequest? Lihatlah 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-

yang memungkinkan PutObjectRequest publik (String bucketName, kunci String, input InputStream, metadata ObjectMetadata)

person RoiG    schedule 28.11.2017
comment
Ini membutuhkan InputStream, yang sama sekali bukan yang dibutuhkan oleh pertanyaan tersebut. - person Jon Nichols; 11.02.2021