Mengizinkan Pengguna Mengupload File

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Saat mengupload langsung ke Google Cloud Storage, Anda membuat HTTP POST ke URL tertentu, yang akan kami jelaskan sebentar lagi. App Engine kemudian menggunakan layanan upload tertentu untuk menangani postingan dan menulis file ke Google Cloud Storage. Ketika penulisan file selesai, App Engine akan memberi tahu aplikasi Anda bahwa upload telah selesai. Karena aplikasi hanya dipanggil setelah selesai, Anda dapat menggunakan metode ini untuk mengupload file yang berukuran sangat besar, hingga batas maksimum 100 Terabyte saat ini.

Mengupload file secara langsung oleh pengguna ke Google Cloud Storage lebih cepat dan lebih hemat biaya daripada menulis ke Google Cloud Storage dari aplikasi App Engine Anda, karena hal ini menghabiskan jam kerja instance dan menimbulkan biaya. Selain itu, penulisan file tidak terjadi dalam permintaan ke aplikasi. Oleh karena itu, metode ini dikecualikan dari waktu tunggu permintaan yang akan berlaku dan mengizinkan upload file yang sangat besar.

Menerapkan upload file

Untuk menerapkan upload file pengguna:

  1. Impor CloudStorageTools:

    use google\appengine\api\cloud_storage\CloudStorageTools;
  2. Buat URL upload khusus aplikasi, menggunakan metode CloudStorageTools::createUploadUrl() dalam file .php Anda sebagai berikut:

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

    Lihat opsi createUploadUrl untuk mengetahui detail tentang opsi yang tersedia. Perhatikan bahwa my_bucket akan menjadi YOUR_APP_ID. REGION_ID.r.appspot.com jika menggunakan bucket default.

  3. Perhatikan bahwa Anda harus mulai mengupload ke URL ini dalam waktu 10 menit setelah dibuat. Selain itu, Anda tidak dapat mengubah URL dengan cara apa pun - URL telah ditandatangani dan tanda tangan tersebut diperiksa sebelum upload Anda dimulai.

  4. Gunakan URL ini sebagai tindakan untuk formulir yang Anda gunakan untuk menerima upload, misalnya:

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

Setelah file diupload, POST dibuat ke jalur yang ditentukan sebagai parameter pertama ke createUploadUrl; dalam contoh di atas, ini adalah /upload_handler.php. Runtime PHP membentuk $_FILES super global yang benar, dan tmp_filename merujuk pada nama file dari file yang baru diupload di Google Cloud Storage.

Misalnya, konten upload_handler.php adalah sebagai berikut:

var_dump($_FILES);

Mengupload file bernama hello.txt dapat menghasilkan output berikut:

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

Setelah upload selesai, Anda dapat membaca file yang diupload menggunakan wrapper streaming gs://. Gunakan move_uploaded_file seperti biasa untuk file lainnya yang diupload, misalnya:

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

Opsi createUploadUrl

Opsi createUploadUrl yang valid ditampilkan dalam tabel berikut:

Opsi Deskripsi
max_bytes_per_blob Bilangan bulat. Nilai default: unlimited. Nilai ukuran terbesar yang diizinkan untuk blob yang diupload.
max_bytes_total Bilangan bulat. Nilai default: unlimited. Ukuran total semua blob yang diupload.
gs_bucket_name String. Nama bucket Google Cloud Storage tempat blob akan diupload. Jika Anda tidak menentukan nilai, blob akan diupload ke bucket default aplikasi.