Hai, kali ini kita akan belajar bagaimana membuat fungsi upload file pada lumen framework.
Peringatan : Tutorial ini bukan tutorial basic ya, jadi kamu harus faham mengenai :
- Pembuatan IAM Roles pada Google
- Pembuatan Bucket pada Google Storage
- Penggunaan composer & lumens
- Penggunaan view – form dan controller nya
Karena pada tutorial ini kami tidak menjelaskan detail tsb, yukz langsung disimak , berikut caranya agar kita bisa membuat upload file pada lumens flatforms ke bucket google storage:
- Create IAM Roles untuk Cloud Storage: https://cloud.google.com/storage/docs/access-control/iam-roles
- Buat Bucket pada Google Storage: Membuat Bucket Pada Google Storage Cloud
- Pastika filesystem sudah ada, jika belum gunakan
composer require league/flysystem
- buat file config/googlecloud.php dan masukkan code berikut ini
<?php
return [
/*
|--------------------------------------------------------------------------
| Google Cloud configuration
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for Google Cloud
|
|
|
|
*/
'project_id' => env('GOOGLE_CLOUD_PROJECT_ID'),
'storage_bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET'),
];
- Jangan lupa pada .env dibuat variable tsb
#-----------------------------------------------------------
# GOOGLE CLOUD
#-----------------------------------------------------------
GOOGLE_CLOUD_PROJECT_ID=id-project-anda
GOOGLE_CLOUD_STORAGE_BUCKET=nama-bucket
- Pada view , pastikan sudah menginputkan fileinput pada form
- Pada Controller sesuaikan script berikut ini
if ($request->hasFile('image')) { // JIKA DITEMUKAN FILE
//-------------------------------------------------------
//PREPARING DATA UPLOAD (LOCAL)
//-------------------------------------------------------
$original_filename = $request->file('image')->getClientOriginalName();
$original_filename_arr = explode('.', $original_filename);
$file_ext = end($original_filename_arr);
$filename = Uuid::uuid4() . '.' . $file_ext;
$destination_path = './upload/user/';
//-------------------------------------------------------
//PREPARING DATA UPLOAD (GCP)
//-------------------------------------------------------
$googleConfigFile = file_get_contents(config_path('googlecloud.json')); //---TERBACA
$storage = new StorageClient([
'keyFile' => json_decode($googleConfigFile, true)
]);
$storageBucketName = config('googlecloud.storage_bucket');
$bucket = $storage->bucket($storageBucketName);
$newFolderName = 'assets/'.$request->anln1;
$googleCloudStoragePath = $newFolderName . '/' . $filename;
//-------------------------------------------------------
//UPLOADING DATA UPLOAD TO GCP
//-------------------------------------------------------
if ($request->file('image')->move($destination_path, $filename)) {
$lokasi_file = $destination_path. $filename;
$fileSource = fopen($lokasi_file, 'r');
$bucket->upload($fileSource, [
'predefinedAcl' => 'publicRead',
'name' => $googleCloudStoragePath
]);
Storage::delete($lokasi_file);
$v_message = 'File berhasil disimpan';
}else{
$v_message = 'Gagal Melakukan Upload: Error ID (Move)';
}
$google_storage_url = 'https://storage.cloud.google.com/' . $storageBucketName . '/' . $googleCloudStoragePath;
Dan coba kembali, semoga sukses.