Zum Inhalt

12 - Cloud Storage SDK in Java

In dieser Übungsaufgabe werden Sie ein Java-CLI-Tool entwickeln, das eine Datei in einen Google Cloud Storage Bucket hochlädt. Das Projekt wird als Maven-Projekt aufgebaut.

Es wird vorausgesetzt, dass bereits ein GCP-Projekt mit einem Google Cloud Storage-Bucket vorhanden ist.

Schritt 1: Projekt-Setup

Erstellen Sie ein neues Maven-Projekt.

mvn archetype:generate -DgroupId=com.example -DartifactId=gcs-uploader \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false
cd gcs-uploader

Schritt 2: Abhängigkeiten hinzufügen

Öffnen Sie die pom.xml-Datei und fügen Sie die notwendigen Abhängigkeiten für Google Cloud Storage hinzu.

<dependencies>
   <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage</artifactId>
       <version>2.1.9</version>
   </dependency>
</dependencies>

Schritt 3: Ergänzung des Manifests in pom.xml

Um sicherzustellen, dass die Main-Class im Manifest des JAR-Files enthalten ist, müssen wir das pom.xml-File anpassen.

<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <version>3.2.0</version>
           <configuration>
               <archive>
                   <manifest>
                       <mainClass>com.example.GcsUploader</mainClass>
                   </manifest>
               </archive>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
           <version>3.3.0</version>
           <configuration>
               <archive>
                   <manifest>
                       <mainClass>com.example.GcsUploader</mainClass>
                   </manifest>
               </archive>
               <descriptorRefs>
                   <descriptorRef>jar-with-dependencies</descriptorRef>
               </descriptorRefs>
           </configuration>
           <executions>
               <execution>
                   <id>make-assembly</id>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>

Schritt 4: Java-Klasse erstellen

Entfernen Sie das src/test-Verzeichnis sowie die Datei App.java im Verzeichnis src/main/java/com/example. Erstellen Sie eine neue Java-Klasse GcsUploader unter src/main/java/com/example.

package com.example;

import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class GcsUploader {
    public static void main(String[] args) throws IOException {
        if (args.length < 2) {
            System.out.println(
                "Usage: java -jar gcs-uploader.jar <file-path> "
                    + "<bucket-name>");
            System.exit(1);
        }

        String filePath = args[0];
        String bucketName = args[1];

        uploadFile(filePath, bucketName);
    }

    public static void uploadFile(String filePath, String bucketName)
        throws IOException {
        Storage storage = StorageOptions.getDefaultInstance().getService();

        File file = new File(filePath);
        BlobInfo blobInfo = BlobInfo.newBuilder(bucketName, file.getName())
            .build();

        storage.create(blobInfo, Files.readAllBytes(Paths.get(filePath)));

        System.out.println(
            "File " + filePath + " uploaded to bucket " + bucketName);
    }
}

Schritt 5: Erstellung des Fat JARs

Kompilieren und erstellen Sie das Fat JAR-File.

mvn clean package

Das Fat JAR-File befindet sich im target-Verzeichnis und heißt gcs-uploader-1.0-SNAPSHOT-jar-with-dependencies.jar.

Schritt 6: Ausführung des Tools

Führen Sie das Tool aus, indem Sie das Fat JAR-File ausführen und die Datei und den Bucket-Namen als Argumente übergeben.

java -jar target/gcs-uploader-1.0-SNAPSHOT-jar-with-dependencies.jar \
  /path/to/your/file.txt your-bucket-name