So laden Sie eine Datei in IBM Cloud Object Storage (ICOS) hoch. Dieses Mal werden wir Aspera, das mit ICOS geliefert wird, mit der Java-Version des SDK betreiben.
$ 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)
Bitte richten Sie hier ein. GitHub:IBM/ibm-cos-sdk-java
Grundsätzlich müssen Sie nur den SDK-Eintrag zu pom.xml
hinzufügen.
Melden Sie sich bei der IBM Cloud Console (Web) an, um Ihre ICOS-Dienstanmeldeinformationen zu überprüfen. Die Dienstanmeldeinformationen finden Sie in den in ICOS erstellten Bucket-Anmeldeinformationen.
Es tut mir leid zu sagen, dass es zu viel Arbeit ist, aber es ist nur ein Beispielprogramm. Bitte schreiben Sie besser.
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);
//Eimerliste
listBuckets(_cosClient);
System.out.println("■ putObject Start ■");
//Dateiübertragung
// 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);
//hochladen
_cosClient.putObject(putRequest);
System.out.println("■ putObject End ■");
System.out.println("ICOS Access END: " + new Timestamp(System.currentTimeMillis()).toString());
//Erfolgreiche Fertigstellung
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 + " ■");
//Existiert Bucket?
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>
Geben Sie Parameter aus der erstellten JAR-Datei an und führen Sie sie aus.
$ 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
Es ist richtig angekommen.
test-upload-java.txt Mar 20, 2020 at 12:03:11 519 B
Überraschenderweise mag es irreführend sein, aber der Upload verlief reibungslos. Tatsächlich gab es für eine Weile nach dem Erstellen des Programms ein mysteriöses Phänomen, dass ein Fehler auftrat, als versucht wurde, den Inhalt des Buckets zu sehen, obwohl die Verbindung hergestellt wurde, aber "jp-" zur URL des Endpunkts hinzugefügt wurde. Ich hatte es nicht, also war es eine Pointe. Ich hoffe, es wird für alle hilfreich sein.
Recommended Posts