Avviso: nei prossimi mesi, stiamo riorganizzando il sito della documentazione di App Engine per semplificare la ricerca di contenuti e l'allineamento con il resto dei prodotti Google Cloud. Saranno disponibili gli stessi contenuti, ma ora la navigazione corrisponderà al resto dei prodotti Cloud. Se hai feedback o domande durante la navigazione nel sito, fai clic su Invia feedback.

Poiché la versione 5.5 di PHP non è più supportata dalla community, consigliamo vivamente alle nuove app di utilizzare il runtime PHP 7 e versioni successive.

Permettere agli utenti di caricare file

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID area geografica potrebbero sembrare simili ai codici paese e provincia più utilizzati. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Quando carichi un file direttamente su Google Cloud Storage, crei un POST HTTP in un URL specifico, che descriviamo tra poco. App Engine utilizza poi un servizio di caricamento specifico per gestire il post e scrivere il file su Google Cloud Storage. Al termine della scrittura del file, App Engine comunica all'app che il caricamento è stato completato. Poiché la tua app viene richiamata solo al completamento, puoi utilizzare questo metodo per caricare file di dimensioni molto grandi, fino al massimo attuale di 100 Terabyte.

Il caricamento di file direttamente in Google Cloud Storage da parte degli utenti è più rapido ed economico rispetto alla scrittura in Google Cloud Storage dall'app App Engine, perché consuma ore di istanza e comporta dei costi. Inoltre, la scrittura del file non avviene all'interno di una richiesta all'applicazione. Pertanto è esente dal timeout della richiesta che altrimenti sarebbe valido e consentirà il caricamento di file di grandi dimensioni.

Implementare i caricamenti di file

Per implementare il caricamento file utente:

  1. Importa CloudStorageTools:

    use google\appengine\api\cloud_storage\CloudStorageTools;
  2. Crea l'URL di caricamento specifico per l'applicazione, utilizzando il metodo CloudStorageTools::createUploadUrl() nel tuo file .php come segue:

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

    Consulta le opzioni createUploadUrl per i dettagli sulle opzioni disponibili. Tieni presente che my_bucket sarà YOUR_APP_ID. REGION_ID.r.appspot.com se utilizzi il bucket predefinito.

  3. Tieni presente che devi iniziare a caricarlo su questo URL entro 10 minuti dalla sua creazione. Inoltre, non puoi modificare in alcun modo l'URL, che viene firmato e la firma viene controllata prima dell'inizio del caricamento.

  4. Usa questo URL come azione per il modulo che usi per accettare i caricamenti, ad esempio:

    <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>

Dopo il caricamento dei file, viene inviato un POST al percorso specificato come primo parametro per createUploadUrl; nell'esempio precedente, questo è /upload_handler.php. Il runtime PHP crea il $_FILES super globale corretto, mentre tmp_filename si riferisce al nome del file appena caricato in Google Cloud Storage.

Ad esempio, supponiamo che i contenuti di upload_handler.php siano i seguenti:

var_dump($_FILES);

Il caricamento di un file denominato hello.txt potrebbe produrre il seguente output:

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)
  }
}

Al termine del caricamento, puoi leggere il file caricato utilizzando il wrapper wrapper gs://. Utilizzi move_uploaded_file come faresti per qualsiasi altro file caricato, ad esempio:

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

createUploadUrl opzioni

Le opzioni di createUploadUrl valide sono mostrate nella seguente tabella:

Opzione Descrizione
max_bytes_per_blob Numero intero. Valore predefinito: unlimited. Il valore della dimensione maggiore consentita per un blob caricato.
max_bytes_total Numero intero. Valore predefinito: unlimited. La dimensione totale di tutti i blob caricati.
gs_bucket_name Stringa. Il nome di un bucket Google Cloud Storage in cui devono essere caricati i blob. Se non specifichi un valore, il blob viene caricato nel bucket predefinito dell'applicazione.