Nutzern das Hochladen von Dateien erlauben

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.

Hier finden Sie weitere Informationen zu Regions-IDs.

Wenn Sie direkt in Google Cloud Storage hochladen, erstellen Sie einen HTTP POST für eine bestimmte URL, wie weiter unten beschrieben wird. App Engine verwendet dann einen speziellen Uploadservice für die Verarbeitung des Posts und schreibt die Datei in Google Cloud Storage. Wenn das Schreiben der Datei abgeschlossen ist, benachrichtigt App Engine die Anwendung, dass das Hochladen ausgeführt wurde. Da die Anwendung erst nach Abschluss aufgerufen wird, können Sie mit dieser Methode sehr große Dateien hochladen, derzeit bis zu maximal 100 Terabyte.

Das Hochladen von Dateien direkt in Google Cloud Storage durch den Nutzer ist schneller und kostengünstiger als das Schreiben in Google Cloud Storage über Ihre App Engine-Anwendung. Dies nimmt Instanzstunden in Anspruch und verursacht Kosten. Darüber hinaus wird das Schreiben der Datei nicht im Rahmen einer Anfrage an die Anwendung ausgeführt. Daher ist es vom sonst geltenden Zeitlimit für Anfragen ausgenommen, sodass sehr große Dateien hochgeladen werden können.

Dateiuploads implementieren

So implementieren Sie den Upload von Nutzerdateien:

  1. Importieren Sie CloudStorageTools:

    use google\appengine\api\cloud_storage\CloudStorageTools;
  2. Erstellen Sie mit der Methode CloudStorageTools::createUploadUrl() in der .php-Datei die anwendungsspezifische Upload-URL so:

    $options = ['gs_bucket_name' => $my_bucket];
    $upload_url = CloudStorageTools::createUploadUrl('/upload/handler', $options);

    Unter createUploadUrl erhalten Sie ausführliche Informationen zu den verfügbaren Optionen. my_bucket ist YOUR_APP_ID. REGION_ID.r.appspot.com, wenn der Standard-Bucket verwendet wird.

  3. Beachten Sie, dass Sie innerhalb von zehn Minuten nach der Erstellung mit dem Hochladen auf diese URL beginnen müssen. Darüber hinaus können Sie die URL nicht mehr ändern. Sie hat eine Signatur, die vor dem Hochladen überprüft wird.

  4. Verwenden Sie diese URL als Aktion für das Formular, das Sie für das Akzeptieren von Uploads nutzen, etwa in folgender Form:

    <form action="{{ upload_url }}" enctype="multipart/form-data" method="post">
        Files to upload: <br>
       <input type="file" name="uploaded_files" size="40">
       <input type="submit" value="Send">
    </form>

Nach dem Hochladen der Datei(en) erfolgt ein POST an den Pfad, der als erster Parameter für createUploadUrl festgelegt ist. Im obigen Beispiel ist dies /upload_handler.php. Die PHP-Laufzeit bildet das korrekte Superglobal $_FILES und tmp_filename verweist auf den Dateinamen der neu in Google Cloud Storage hochgeladenen Datei.

Angenommen, upload_handler.php enthält folgende Zeile:

var_dump($_FILES);

Das Hochladen einer Datei namens hello.txt kann zu folgender Ausgabe führen:

array(1) {
  ['uploaded_files']=>
  array(5) {
    ['name']=>    string(14) 'hello.txt'
    ['type']=>    string(10) 'text/plain'
    ['tmp_name']=>    string(73) 'gs://my_bucket/L2FwcHMtdXBsb2FkL2Jsb2JzL2IxNUFBVGNJNXNTd0VqR0tFSUtDRGxadGc'
    ['error']=>    int(0)
    ['size']=>    int(1452)
  }
}

Wenn der Upload abgeschlossen ist, können Sie die hochgeladene Datei mit dem gs://-Stream-Wrapper lesen. Sie verwenden move_uploaded_file wie für jede andere hochgeladene Datei. Beispiel:

$file_name = $_FILES['uploaded_files']['name'];
$temp_name = $_FILES['uploaded_files']['tmp_name'];
move_uploaded_file($temp_name, "gs://${my_bucket}/${file_name}.txt");

Optionen für createUploadUrl

In der folgenden Tabelle sind die gültigen Optionen für createUploadUrl aufgeführt:

Option Beschreibung
max_bytes_per_blob Ganzzahl. Standardwert: unlimited. Der Wert für die maximal zulässige Größe eines hochgeladenen Blob.
max_bytes_total Ganzzahl. Standardwert: unlimited. Die Gesamtgröße aller hochgeladenen Blobs.
gs_bucket_name String. Der Name eines Google Cloud Storage-Buckets, in den die Blobs hochgeladen werden sollen. Wenn Sie keinen Wert angeben, wird das Blob in den Standard-Bucket der Anwendung hochgeladen.