มีวิธีการเขียนวัตถุไปยัง 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 cilent และรองรับการถ่ายโอนแบบหลายส่วนโดยอัตโนมัติหากขนาดสตรีมใหญ่เกินไป   -  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 input, ObjectMetadata metadata)

person RoiG    schedule 28.11.2017
comment
สิ่งนี้ใช้ InputStream ซึ่งไม่ใช่สิ่งที่คำถามต้องการเลย - person Jon Nichols; 11.02.2021