Hochladen / Herunterladen / Löschen von Daten in S3 mithilfe von Amazon S3 Client Builder mit AWS SDK für Java

Die Verwendung der im alten SDK bereitgestellten AmazonS3Client-Klasse wird als veraltet behandelt, und es wird in der Referenz geschrieben, dass AmazonS3ClientBuilder verwendet werden kann, aber es scheint, dass es nur wenige japanische Dokumente gibt. Ich werde es daher als Erinnerung belassen.

Beispielcode

S3Access.java


package s3test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;

public class S3Access {

    private static final String ENDPOINT_URL = "https://s3-ap-northeast-1.amazonaws.com";
    private static final String REGION       = "ap-northeast-1";
    private static final String ACCESS_KEY   = "【Zugangsschlüssel】";
    private static final String SECRET_KEY   = "[Geheimer Schlüssel]";

    //--------------------------------------------------
    //hochladen
    //--------------------------------------------------
    public void putObject(String bucketName, String objectKey, int objectSize, InputStream is) throws Exception {

        //Client-Generierung
        AmazonS3 client = getClient(bucketName);

        ObjectMetadata metadata = new ObjectMetadata();
        //Stellen Sie nur die Größe für alle Fälle ein (Ausnahme, wenn inkonsistent)
        metadata.setContentLength(objectSize);

        //hochladen
        client.putObject(bucketName, objectKey, is, metadata);
    }

    //--------------------------------------------------
    //herunterladen
    //--------------------------------------------------
    public S3ObjectInputStream getObject(String bucketName, String objectKey) throws Exception {

        //Client-Generierung
    	AmazonS3 client = getClient(bucketName);

    	//herunterladen
    	S3Object s3Object = client.getObject(bucketName, objectKey);

	return s3Object.getObjectContent();
    }

    //--------------------------------------------------
    //Massenlöschung
    //--------------------------------------------------
    public List<String> deleteObjects(String bucketName, List<String> objectKeys) throws Exception {

        //Client-Generierung
        AmazonS3 client = getClient(bucketName);

        List<KeyVersion> keys = new ArrayList<KeyVersion>();
        objectKeys.forEach(obj -> keys.add(new KeyVersion(obj)));

        //Datei löschen
        DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(keys);
        DeleteObjectsResult  result  = client.deleteObjects(request);

        //Holen Sie sich den Schlüssel des gelöschten Objekts
        List<String>         deleted = new ArrayList<String>();
        result.getDeletedObjects().forEach(obj -> deleted.add(obj.getKey()));

        return deleted;
    }

    //--------------------------------------------------
    //Client-Generierung
    //--------------------------------------------------
    private AmazonS3 getClient(String bucketName) throws Exception {

        //Authentifizierungsinformationen
    	AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);

    	//Client-Einstellungen
        ClientConfiguration clientConfig = new ClientConfiguration();
        clientConfig.setProtocol(Protocol.HTTPS);  //Protokoll
        clientConfig.setConnectionTimeout(10000);   //Verbindungszeitüberschreitung(ms)	

        //Endpunkteinstellung
        EndpointConfiguration endpointConfiguration = new EndpointConfiguration(ENDPOINT_URL, REGION);

        //Client-Generierung
        AmazonS3 client = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(credentials))
                        .withClientConfiguration(clientConfig)
                        .withEndpointConfiguration(endpointConfiguration).build();

        if(!client.doesBucketExist(bucketName)) {
        //Ausnahme, wenn kein Eimer vorhanden ist
            throw new Exception("S3 Eimer[" + bucketName + "]da ist nicht");
        }

        return client;
    }
}

Ergänzung

Recommended Posts

Hochladen / Herunterladen / Löschen von Daten in S3 mithilfe von Amazon S3 Client Builder mit AWS SDK für Java
Verschlüsseln Sie Daten, die mit AWS SDK für Java / SSE-KMS in S3 hochgeladen wurden
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
[Java] Test S3 Upload / Download mit "S3 Ninja"
Holen Sie sich eine Liste der S3-Dateien mit ListObjectsV2Request (AWS SDK für Java)
[AWS SDK für Java] Legen Sie die Wiederholungsrichtlinie für den S3-Client fest
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
Richten Sie signierte Cookies (für CloudFront) mit benutzerdefinierten Richtlinien mithilfe des AWS SDK für Java ein
Holen Sie sich die S3-Objektgröße mit AWS SDK for Ruby
Untersucht, wie Dienste mit Watson SDK für Java aufgerufen werden
Zugriff auf den S3-Bucket mithilfe der SSE-KMS-Verschlüsselung in der EC2-IAM-Rollenumgebung (AWS SDK für Java)
Laden Sie Dateien mit dem SDK (Java-Version) auf Aspera hoch, das mit IBM Cloud Object Storage (ICOS) geliefert wird.
Beispiel für die Verwendung der Bulk-API von Salesforce vom Java-Client mit PK-Chunking
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
[Hinweis] Von S3 herunterladen, auf S3 hochladen
AWS SDK für Java 1.11.x und 2.x.
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose
Verwenden von Java mit AWS Lambda-Implementation-Check CloudWatch-Argumenten
Verwenden von Java mit AWS Lambda-Implementierung-Stop / Launch EC2
So löschen Sie Daten mit einem externen Schlüssel
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen