Cloud Storage verwenden

Sie können Cloud Storage zum Speichern und Bereitstellen von Dateien wie Filmen oder Bildern oder anderen statischen Inhalten verwenden.

In diesem Dokument wird beschrieben, wie Sie mit der Google Cloud-Clientbibliothek in Ihrer App Daten in Cloud Storage speichern und abrufen können.

Hinweis

  • Folgen Sie der Anleitung unter „Hello, World!“ für Java in App Engine, um Ihre Umgebung und Ihr Projekt einzurichten. Darin erfahren Sie auch mehr über die Strukturierung von Java-Anwendungen in App Engine. Notieren Sie sich Ihre Projekt-ID und bewahren Sie sie auf. Sie brauchen diese ID, um die in diesem Dokument beschriebene Beispielanwendung auszuführen.

  • Vergessen Sie nicht, einen Cloud Storage-Bucket für Ihre Anwendung zu erstellen. Rufen Sie dazu den folgenden Befehl auf:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Machen Sie den Bucket öffentlich lesbar, damit er zum Bereitstellen von Dateien genutzt werden kann:

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    

Beispiel herunterladen

So klonen Sie das Repository:

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/flexible/cloudstorage

Projektkonfiguration bearbeiten und Abhängigkeiten installieren

Legen Sie BUCKET_NAME in app.yaml auf den Cloud Storage-Bucket fest, den Sie zuvor für Ihr Projekt erstellt haben.

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

env_variables:
  BUCKET_NAME: YOUR-BUCKET-NAME

Legen Sie com.google.cloud in der Datei pom.xml als Abhängigkeit fest und geben Sie google-cloud-storage als Artefakt-ID für diese Abhängigkeit an. Sie haben damit die Funktionen zum Verwenden von Cloud Storage.

<!--  Using libraries-bom to manage versions.
See https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>25.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

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

Anwendungscode

Die Beispielanwendung zeigt eine Webseite an, die den Nutzer zur Angabe einer Datei auffordert, die in Cloud Storage gespeichert werden soll. Wenn der Nutzer eine Datei auswählt und absendet, schreibt der Anfrage-Handler doPost die Datei mit Storage.create in den Cloud Storage-Bucket.

Beachten Sie, dass Sie zum Abrufen dieser Datei aus Cloud Storage den Bucket-Namen und den Dateinamen angeben müssen. Speichern Sie diese Werte für die zukünftige Verwendung in Ihrer Anwendung.

@SuppressWarnings("serial")
@WebServlet(name = "upload", value = "/upload")
@MultipartConfig()
public class UploadServlet extends HttpServlet {

  private static final String BUCKET_NAME = System.getenv("BUCKET_NAME");
  private static Storage storage = null;

  @Override
  public void init() {
    storage = StorageOptions.getDefaultInstance().getService();
  }

  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
    final Part filePart = req.getPart("file");
    final String fileName = filePart.getSubmittedFileName();

    // Modify access list to allow all users with link to read file
    List<Acl> acls = new ArrayList<>();
    acls.add(Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER));
    // the inputstream is closed by default, so we don't need to close it here
    Blob blob =
        storage.create(
            BlobInfo.newBuilder(BUCKET_NAME, fileName).setAcl(acls).build(),
            filePart.getInputStream());

    // return the public download link
    resp.getWriter().print(blob.getMediaLink());
  }
}

Weitere Informationen

Sie erhalten umfassende Informationen zu Cloud Storage in der Cloud Storage-Dokumentation.