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 PHP in App Engine, um eine Umgebung und ein Projekt einzurichten. Darin erfahren Sie auch mehr über die Strukturierung von PHP-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/php-docs-samples
cd php-docs-samples/appengine/flexible/storage

Projektkonfiguration bearbeiten und Abhängigkeiten installieren

Legen Sie in app.yaml CLOUD_STORAGE_BUCKET fest. Dieser Wert ist der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.

env_variables:
  GOOGLE_STORAGE_BUCKET: "your-bucket-name"

Beachten Sie, dass die Cloud Client-Bibliothek in composer.json eingebunden werden muss, da diese Cloud Storage-Funktionen bereitstellt.

{
    "require": {
        "slim/slim": "^4.0",
        "slim/psr7": "^1.3",
        "google/cloud-storage": "^1.0",
        "php-di/slim-bridge": "^3.1"
    }
}

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 auf „Submit“ (Senden) klickt, lädt der Upload-Handler den Inhalt der Datei in ein Blob und schreibt ihn in Cloud Storage.

Beachten Sie, dass nach dem Hochladen der Datei in Cloud Storage die öffentliche URL zu dieser Datei zurückgegeben wird, mit der Sie die Datei direkt aus Cloud Storage bereitstellen können. Sie sollten diesen Wert für die zukünftige Verwendung in Ihrer Anwendung speichern.

use DI\Container;
use Google\Cloud\Storage\StorageClient;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Factory\AppFactory;

// Create App
AppFactory::setContainer($container = new Container());
$app = AppFactory::create();

// Display errors
$app->addErrorMiddleware(true, true, true);

$container = $app->getContainer();

$app->get('/', function (Request $request, Response $response) use ($container) {
    /** @var Google\Cloud\StorageClient */
    $storage = $container->get('storage');
    $bucketName = $container->get('bucket_name');
    $objectName = $container->get('object_name');
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $content = $object->exists() ? $object->downloadAsString() : '';
    $escapedContent = htmlspecialchars($content);
    $response->getBody()->write(<<<EOF
    <h1>Storage Example</h1>
    <h3>Write [<a href="https://cloud.google.com/appengine/docs/flexible/php/using-cloud-storage">docs</a>]:</h3>
    <form action="/write" method="post">
        Some file content:<br />
        <textarea name="content"></textarea><br />
        <input type="submit" />
    </form>
EOF
    );
    if ($content) {
        $response->getBody()->write(
            "<p><strong>Your content:</strong><p><p>$escapedContent</p>"
        );
    }
    return $response;
});

/**
 * Write to a Storage bucket.
 * @see https://cloud.google.com/appengine/docs/flexible/php/using-cloud-storage
 */
$app->post('/write', function (Request $request, Response $response) use ($container) {
    /** @var Google\Cloud\StorageClient */
    $storage = $container->get('storage');
    $bucketName = $container->get('bucket_name');
    $objectName = $container->get('object_name');
    parse_str((string) $request->getBody(), $postData);
    $metadata = ['contentType' => 'text/plain'];
    $storage->bucket($bucketName)->upload($postData['content'] ?? '', [
        'name' => $objectName,
        'metadata' => $metadata,
    ]);
    return $response
        ->withStatus(302)
        ->withHeader('Location', '/');
});

$container->set('storage', function () use ($container) {
    $projectId = $container->get('project_id');
    $storage = new StorageClient([
        'projectId' => $projectId
    ]);
    return $storage;
});

Weitere Informationen

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