Télécharger des fichiers sur Aspera fournis avec IBM Cloud Object Storage (ICOS) à l'aide du SDK (version Java)

Comment télécharger un fichier sur IBM Cloud Object Storage (ICOS). Cette fois, nous utiliserons Aspera fourni avec ICOS en utilisant la version Java du SDK.

Environnement utilisé

$ java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

Configuration du SDK Java

Veuillez configurer en vous référant ici. GitHub:IBM/ibm-cos-sdk-java

En gros, tout ce que vous avez à faire est d'ajouter l'entrée SDK à pom.xml.

Vérifier les informations IQOS

Connectez-vous à IBM Cloud Console (Web) pour vérifier vos informations d'identification de service ICOS. Les informations d'identification du service se trouvent dans les informations d'identification du compartiment créées dans ICOS. service_info.png

programme

Je suis désolé de dire que c'est trop de travail, mais ce n'est qu'un exemple de programme. Veuillez écrire d'une meilleure manière.

IcosControl.java


package com.ibm.jp.dev;

import java.io.*;
import java.sql.Timestamp;
import java.util.List;

import com.ibm.cloud.objectstorage.ClientConfiguration;
import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
import com.ibm.cloud.objectstorage.auth.AWSCredentials;
import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
import com.ibm.cloud.objectstorage.services.s3.model.*;
import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;

public class IcosControl {
    private static String COS_ENDPOINT = "https://s3.jp-tok.cloud-object-storage.appdomain.cloud"; // eg "https://s3.us.cloud-object-storage.appdomain.cloud"
    private static String COS_API_KEY_ID = "your-api-key"; // eg "0viPHOY7LbLNa9eLftrtHPpTjoGv6hbLD1QalRXikliJ"
    private static String COS_AUTH_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
    private static String COS_SERVICE_CRN = "your-service-crn"; // eg "crn:v1:bluemix:public:cloud-object-storage:global:a/3bf0d9003abfb5d29761c3e97696b71c:d6f04d83-6c4f-4a62-a165-696756d63903::"
    private static String COS_BUCKET_LOCATION = "jp-tok"; // eg "us"
    private static String COS_BUCKET_NAME = "your-bucket-name";
    private static String COS_STORAGE_CLASS = "jp-tok-standard"; // eg us-south-standard
    private static AmazonS3 _cosClient;

    private static int SUCCESS = 0;
    private static int ERROR = -1;

    public static void main(String[] args) throws FileNotFoundException {

        SDKGlobalConfiguration.IAM_ENDPOINT = COS_AUTH_ENDPOINT;
        String bucketName = COS_BUCKET_NAME;
        String api_key = COS_API_KEY_ID;
        String service_instance_id = COS_SERVICE_CRN;
        String endpoint_url = COS_ENDPOINT;
        String location = COS_BUCKET_LOCATION;

        System.out.println("ICOS Access START: " + new Timestamp(System.currentTimeMillis()).toString());
        _cosClient = createClient(api_key, service_instance_id, endpoint_url, location);

        //Liste de seau
        listBuckets(_cosClient);

        System.out.println("■ putObject Start ■");

        //Transmission de fichiers
//        File file = new File("/tmp/test-upload-java.txt");
        File file = new File(args[0]);
        FileInputStream fis = new FileInputStream(file);
        ObjectMetadata om = new ObjectMetadata();
        om.setContentLength(file.length());
        final PutObjectRequest putRequest = new PutObjectRequest(bucketName, file.getName(), fis, om);
        //télécharger
        _cosClient.putObject(putRequest);
        System.out.println("■ putObject End ■");

        System.out.println("ICOS Access END: " + new Timestamp(System.currentTimeMillis()).toString());

        //Réussite
        System.exit(SUCCESS);

    }

    /**
     * @param api_key
     * @param service_instance_id
     * @param endpoint_url
     * @param location
     * @return AmazonS3
     */
    public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
    {
        AWSCredentials credentials;
        credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);

        ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
        clientConfig.setUseTcpKeepAlive(true);

        AmazonS3 cos = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
                .withClientConfiguration(clientConfig).build();
        return cos;
    }

    /**
     * @param bucketName
     * @param cosClient
     */
    public static void listObjects(String bucketName, AmazonS3 cosClient)
    {
        System.out.println();
        System.out.println("■ Listing objects in bucket " + bucketName + " ■");

        //Est-ce que Bucket existe?
        boolean isBucket = false;
        isBucket = cosClient.doesBucketExistV2(bucketName);
        if(isBucket) {
            ObjectListing objectListing = cosClient.listObjects(new ListObjectsRequest().withBucketName(bucketName));
            for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                System.out.println(" - " + objectSummary.getKey() + "  " + "(size = " + objectSummary.getSize() + ")");
            }
        }
        System.out.println();
    }

    /**
     * @param cosClient
     */
    public static void listBuckets(AmazonS3 cosClient)
    {
        System.out.println();
        System.out.println("■ Listing buckets ■");
        final List<Bucket> bucketList = cosClient.listBuckets();
        for (final Bucket bucket : bucketList) {
            System.out.println(bucket.getName());
        }
        System.out.println();
    }

}

pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ibm.jp.dev</groupId>
    <artifactId>cos-control</artifactId>
    <version>1.0</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.ibm.cos</groupId>
            <artifactId>ibm-cos-java-sdk</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.10.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.ibm.jp.dev.IcosControl</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Télécharger l'exécution

Courir

Donnez les paramètres du fichier jar créé et exécutez-le.

$ java -jar target/cos-control-1.0-jar-with-dependencies.jar /tmp/test-upload-java.txt
ICOS Access START: 2020-03-20 12:03:04.983

■ Listing buckets ■
test-bucket

■ putObject Start ■
■ putObject End ■
ICOS Access END: 2020-03-20 12:03:12.164

Confirmation d'arrivée

Il est arrivé correctement.

test-upload-java.txt              Mar 20, 2020 at 12:03:11   519 B 

Épilogue

Étonnamment, cela peut être trompeur, mais le téléchargement s'est bien déroulé. En fait, pendant un certain temps après la création du programme, il y a eu un phénomène mystérieux selon lequel une erreur s'est produite en essayant de voir le contenu du Bucket alors que la connexion était établie, mais "jp-" est ajouté à l'URL du point final. Je ne l'avais pas, donc c'était une ligne de frappe. J'espère que cela sera utile à tout le monde.

Lien de référence

Recommended Posts

Télécharger des fichiers sur Aspera fournis avec IBM Cloud Object Storage (ICOS) à l'aide du SDK (version Java)
Importer / télécharger / supprimer en bloc des données sur S3 à l'aide d'Amazon S3 Client Builder avec AWS SDK pour Java
Créer des applications Java avec IBM Cloud Functions
[Android] [Java] Télécharger des images sur GCS (Google Cloud Storage) avec Stream à l'aide de Glide