Rumah > Artikel > pembangunan bahagian belakang > Muat naik Fail dalam Laravel
Anda boleh memuat naik fail dalam Laravel menggunakan API bersatu yang cantik untuk berinteraksi dengan pelbagai jenis sistem storan, daripada cakera setempat kepada storan objek jauh seperti S3.
Sebanyak komponen Laravel lain yang anda boleh berinteraksi dengan sistem fail aplikasi melalui Fasad Penyimpanan: Menerangi/Sokongan/Fasad/Penyimpanan
Kelas ini membolehkan anda mengakses pemacu storan yang dipanggil cakera yang melaksanakan antara muka biasa. Jadi anda boleh menukar storan fizikal asas tanpa menyentuh kod aplikasi anda.
Ini membolehkan anda bukan sahaja membaca dan menulis daripada sistem fail tempatan anda, FTP atau AWS S3 dengan cara yang sama, tetapi juga memilih pilihan berbeza bergantung pada sama ada anda sedang membangun dalam persekitaran setempat atau menjalankan aplikasi dalam pengeluaran .
Jika anda ingin belajar cara membina Fasad tersuai anda, baca artikel di bawah:
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
Untuk lebih banyak artikel teknikal, anda boleh mengikuti saya di Linkedin atau X.
Laravel menguruskan akses kepada storan melalui "cakera" yang dikonfigurasikan dalam fail konfigurasi config/filesystems.php. Setiap cakera mempunyai nama pengenalpastian dan pemacu yang membolehkan anda menentukan jenis sistem storan sebenar yang akan disambungkan kepada aplikasi.
Bergantung pada pemandu, pilihan lain kemudiannya boleh dikonfigurasikan. Sebagai contoh, cakera dengan pemacu tempatan memerlukan penetapan parameter akar untuk menunjukkan direktori tempatan sebenar yang sepadan dengannya. Mereka yang mempunyai pemacu s3 memerlukan menetapkan pelbagai kunci, rahsia, wilayah dan baldi untuk mengakses sistem yang serasi AWS S3 atau S3.
Antara pelbagai cakera yang dikonfigurasikan secara lalai, yang dinamakan awam adalah salah satu yang paling menarik. Cakera ini direka bentuk untuk mengehoskan fail tersebut yang mesti boleh diakses secara terbuka oleh aplikasi Laravel.
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
Seperti yang anda lihat dalam coretan di atas cakera mempunyai setempat sebagai pemacu dan akarnya ialah storan peribadi/apl/direktori awam.
Bagaimanakah direktori peribadi boleh diakses secara umum?
Untuk membenarkan cakera awam berfungsi, anda perlu mencipta pautan sym untuk menyambungkan folder awam Laravel ke akar persendirian yang dikonfigurasikan dalam cakera.
Nasib baik Laravel mempunyai arahan terbina dalam untuk melakukan persediaan ini secara automatik.
php artisan storage:link
Anda harus menjalankan arahan ini pada kali pertama anda memasang aplikasi Laravel anda pada mesin, termasuk persekitaran setempat anda.
Apabila anda mencipta pautan sym Laravel menyambungkan storan/apl/folder awam ke folder awam/storan. Ini bermakna jika anda ingin memaparkan fail dalam halaman awam anda boleh lakukan:
{{ asset('storage/file.txt') }}
Fail disimpan secara fizikal dalam storan/apl/awam, tetapi terima kasih kepada pautan sym anda boleh mengaksesnya dari laluan yourdomain.com/storage/filename.ext
Ini diperlukan kerana folder awam biasanya merupakan punca pelayan web (Apache, NGINX, dll), jadi ia adalah satu-satunya laluan yang boleh dituju oleh tapak web atau apl anda. Pautan sym menjadikan sebahagian daripada folder storan tersedia untuk bahagian luar.
Berikut ialah contoh borang HTML untuk membenarkan muat naik fail:
<form action="/avatar" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="avatar"/> <button type="submit"></button> </form>
Menyimpan fail ini ke cakera adalah sangat mudah. Objek permintaan mempunyai kaedah fail yang membolehkan anda mendapatkan item yang dihantar dari medan bentuk fail jenis. Anda boleh mendapatkan item yang menghantar nama medan input ke dalam kaedah fail untuk mengakses fail yang dihantar dari bahagian hadapan.
namespace App/Http/Controllers; use App/Http/Resources/UserResource; class AvatarController extends Controller { public function update(Request $request) { $path = $request->file('avatar')->store("avatars/{$request->user()->id}"); $request->user()->update(['avatar' => $path]); return new UserResource($request->user()); } }
Kaedah stor mendapatkan fail daripada permintaan dan menyimpannya pada cakera menjana ID unik untuk nama fail, manakala sambungan fail diperoleh daripada jenis MIME yang disediakan dalam permintaan. Ia mengembalikan laluan fail yang disimpan, yang oleh itu boleh disimpan atau digunakan.
kedai akan menggunakan cakera lalai yang dikonfigurasikan dalam config/filesystem.php tetapi anda akhirnya boleh menentukan cakera lain dengan segera:
$path = $request->file('avatar') ->store("avatars/{$request->user()->id}", 's3');
Hasil yang sama boleh dicapai menggunakan fasad Storan secara langsung:
$path = Storage::disk('s3') ->putFile("avatars/{$request->user()->id}", $request->file('avatar'));
Saya secara peribadi lebih suka menggunakan fasad Storan kerana ia menjadikan kenyataan lebih jelas.
Untuk lebih banyak artikel teknikal, anda boleh mengikuti saya di Linkedin atau X.
Inspektor ialah alat Pemantauan Pelaksanaan Kod yang direka khusus untuk pembangun perisian. Anda tidak perlu memasang apa-apa di peringkat pelayan, cuma pasang pakej Laravel dan anda sudah bersedia untuk pergi.
Jika anda sedang mencari pemantauan HTTP, cerapan pertanyaan pangkalan data dan keupayaan untuk memajukan makluman dan pemberitahuan ke dalam persekitaran pemesejan pilihan anda, cuba Inspektor secara percuma. Daftar akaun anda.
Atau ketahui lebih lanjut di tapak web: https://inspector.dev
Atas ialah kandungan terperinci Muat naik Fail dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!