Dalam pembangunan aplikasi Laravel, muat naik fail adalah operasi yang sangat biasa. Laravel menyediakan cara yang sangat mudah untuk mengurus fail yang dimuat naik ini, iaitu sistem fail. Sistem fail sebenarnya ialah kaedah storan lalai Laravel, dan ia menyimpan fail yang dimuat naik ke lokasi tertentu pada cakera.
Walau bagaimanapun, dalam beberapa kes, kami mungkin perlu menyimpan fail yang dimuat naik di lokasi lain, seperti storan awan, CDN atau perkhidmatan storan jauh yang lain. Pada masa ini, kita perlu mengubah suai kaedah storan lalai Laravel supaya ia boleh menyesuaikan diri dengan keperluan kita.
Artikel ini akan memperkenalkan cara mengubah suai storan lalai dalam Laravel untuk menyesuaikan diri dengan pelbagai senario.
1. Sistem fail Laravel
Dalam Laravel, sistem fail digunakan untuk mengurus fail dan direktori. Sistem fail Laravel termasuk beberapa operasi asas, seperti mencipta fail, membaca fail, mengemas kini fail dan memadam fail.
Sistem fail Laravel boleh menggunakan berbilang cakera untuk storan, termasuk cakera tempatan, storan awan seperti S3, storan FTP, dsb.
Kami boleh mengkonfigurasi sistem fail Laravel dalam fail konfigurasi config/filesystems.php:
<code class="php"><?php return [ 'default' => 'local', 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], ], ];</code>
Dalam kod di atas, kita dapat melihat bahawa tiga jenis cakera dikonfigurasikan di sini: cakera tempatan (tempatan), cakera awam (awam) dan storan awan S3 (s3).
2. Ubah suai storan lalai
Dalam Laravel, kita boleh menggunakan kelas Storan untuk mengurus sistem fail. Secara lalai, Laravel akan menggunakan cakera tempatan sebagai lokasi storan sistem fail lalai ini ditakrifkan dalam config/filesystems.php dan nilai lalai adalah setempat.
Kami boleh mengubah suai item konfigurasi lalai config/filesystems.php untuk mengubah suai storan lalai:
<code class="php"><?php return [ 'default' => env('FILESYSTEM_DRIVER', 'local'), 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], ], ];</code>
Dalam kod di atas, kami menukar nilai lalai daripada setempat kepada env(' FILESYSTEM_DRIVER ', 'local'). Fungsi env digunakan di sini, yang membolehkan kami mentakrifkan pembolehubah persekitaran FILESYSTEM_DRIVER dalam fail .env untuk mengubah suai storan lalai.
Sebagai contoh, jika anda mentakrifkan FILESYSTEM_DRIVER=s3 dalam fail .env, maka apabila menggunakan sistem fail Storan, Laravel akan menggunakan cakera s3 sebagai lokasi storan sistem fail lalai.
3. Gunakan storan tersuai
Selain mengubah suai storan lalai, kami juga boleh mengkonfigurasi storan tersuai untuk memenuhi keperluan khas kami.
Pertama, kita perlu mencipta pemacu storan baharu. Dalam direktori apl, buat direktori baharu yang dipanggil Storan, dan kemudian buat kelas baharu dalam direktori itu.
Sebagai contoh, jika kita ingin mencipta pemacu storan bernama Hadoop, maka kita boleh mencipta kelas bernama HadoopDriver:
<code class="php"><?php namespace App\Storage; use Illuminate\Filesystem\FilesystemAdapter; use Illuminate\Support\Facades\Storage; use Illuminate\Support\ServiceProvider; class HadoopDriverServiceProvider extends ServiceProvider { public function boot() { Storage::extend('hadoop', function ($app, $config) { // 返回一个实现了 FilesystemAdapter 接口的类 return new HadoopFileSystemAdapter($config); }); } } class HadoopFileSystemAdapter implements FilesystemAdapter { // 实现 FilesystemAdapter 接口的方法 }</code>
Dalam kod di atas, kami mentakrifkan kelas HadoopDriverServiceProvider , dalam kaedah but, pemacu storan baharu bernama hadoop didaftarkan.
Kemudian, kami mentakrifkan kelas HadoopFileSystemAdapter, yang melaksanakan semua kaedah antara muka FilesystemAdapter. Kaedah ini akan dipanggil apabila kami menggunakan sistem fail Storan untuk melaksanakan pelbagai operasi pada sistem fail, seperti mencipta fail, membaca fail, mengemas kini fail, memadam fail, dsb.
Akhir sekali, kita perlu mendaftarkan kelas HadoopDriverServiceProvider yang dibuat di atas ke dalam aplikasi Laravel. Ini boleh dilakukan dengan menambah kelas HadoopDriverServiceProvider dalam tatasusunan penyedia fail config/app.php:
<code class="php"><?php return [ // 省略其它代码 'providers' => [ // 省略其它服务提供者 /* * 注册 Hadoop 存储驱动 */ \App\Storage\HadoopDriverServiceProvider::class, ], ];</code>
4 Menggunakan storan tersuai
Menggunakan storan tersuai memerlukan memanggil kaedah storan dan Tentukan laluan storan. Sebagai contoh, jika kita ingin menggunakan storan tersuai bernama hadoop, kita boleh menggunakannya seperti ini:
<code class="php">use Illuminate\Support\Facades\Storage; Storage::disk('hadoop')->put('file.txt', $content);</code>
Dalam kod di atas, kami menggunakan kaedah cakera untuk menentukan storan untuk digunakan, menyatakannya sebagai hadoop. Kami kemudian menggunakan kaedah put untuk menulis kandungan $content ke fail file.txt pada sistem fail.
Ringkasan
Dalam pembangunan aplikasi Laravel, muat naik dan penyimpanan fail adalah keperluan yang sangat biasa. Laravel menyediakan sistem fail yang berkuasa untuk mengurus operasi ini, dan juga membolehkan kami mengubah suai lokasi storan sistem fail lalai mengikut keperluan kami sendiri, malah mencipta pemacu storan tersuai untuk memenuhi keperluan khas. Ciri-ciri ini sangat meningkatkan fleksibiliti dan kebolehskalaan aplikasi.
Atas ialah kandungan terperinci laravel mengubah suai storan lalai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!