تحميل الملفات وإدارتها باستخدام نظام File Storage في Laravel
المقدمة
نظام تخزين الملفات في Laravel هو أداة قوية توفر واجهة موحدة للعمل مع أنظمة الملفات المختلفة مثل التخزين المحلي، تخزين Amazon S3، وتخزين FTP. باستخدام هذا النظام، يمكنك بسهولة تحميل الملفات، حفظها، واسترجاعها بطريقة آمنة وفعالة. في هذا الدليل، سنشرح كيفية إعداد التخزين، تحميل الملفات، وإدارتها باستخدام Laravel.
الخطوة 1: إعداد نظام تخزين الملفات
بشكل افتراضي، يستخدم Laravel نظام الملفات المحلي للتخزين. يتم تكوين إعدادات التخزين في ملف config/filesystems.php
. لنقم بتحديث إعدادات التخزين لتكون جاهزة لتحميل الملفات:
'default' => env('FILESYSTEM_DRIVER', 'public'),
'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'),
'endpoint' => env('AWS_ENDPOINT'),
],
],
للتأكد من أن الملفات المخزنة في نظام الملفات يمكن الوصول إليها بشكل عام، قم بتشغيل الأمر التالي لإنشاء رابط رمزي للمجلد public/storage
:
php artisan storage:link
الخطوة 2: إنشاء نموذج لتحميل الملفات
لنقم بإنشاء نموذج تحميل بسيط باستخدام HTML وBlade. سنقوم بإنشاء نموذج يحتوي على حقل لتحميل الملفات وزر إرسال:
<!-- resources/views/upload.blade.php -->
<form action="{{ route('file.upload') }}" method="POST" enctype="multipart/form-data">
@csrf
<div>
<label for="file">اختر ملفًا للتحميل:</label>
<input type="file" name="file" id="file">
</div>
<button type="submit">تحميل</button>
</form>
الخطوة 3: إنشاء مسار ومتحكم لتحميل الملفات
بعد إنشاء النموذج، نحتاج إلى إنشاء مسار ومتحكم لمعالجة عملية تحميل الملف. لنقم بإضافة المسار إلى ملف web.php
:
use App\Http\Controllers\FileController;
Route::get('/upload', function () {
return view('upload');
});
Route::post('/upload', [FileController::class, 'upload'])->name('file.upload');
لنقم الآن بإنشاء متحكم لتحميل الملفات باستخدام الأمر التالي:
php artisan make:controller FileController
افتح ملف FileController.php
وأضف دالة upload
لمعالجة تحميل الملف:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function upload(Request $request)
{
$request->validate([
'file' => 'required|mimes:jpg,jpeg,png,pdf|max:2048',
]);
if ($request->file('file')->isValid()) {
$filePath = $request->file('file')->store('uploads', 'public');
return back()->with('success', 'تم تحميل الملف بنجاح!')->with('file', $filePath);
}
return back()->withErrors(['file' => 'حدث خطأ أثناء تحميل الملف.']);
}
}
في هذا المثال، نتحقق من صحة الملف باستخدام قواعد التحقق المدمجة في Laravel للتأكد من أن الملف المرفوع هو صورة أو ملف PDF وألا يتجاوز حجمه 2 ميغابايت. بعد ذلك، نتحقق مما إذا كان الملف صالحًا قبل تخزينه في المجلد uploads
في نظام الملفات العام.
الخطوة 4: عرض الملفات المحملة وإدارتها
لإدارة الملفات المحملة، يمكنك إنشاء عرض يعرض الملفات المحملة ويتيح للمستخدمين تنزيلها أو حذفها. لنقم بإنشاء عرض جديد يعرض قائمة الملفات المحملة:
<!-- resources/views/files.blade.php -->
<h1>الملفات المحملة</h1>
<ul>
@foreach ($files as $file)
<li>
<a href="{{ route('file.download', $file) }}">{{ $file }}</a>
<form action="{{ route('file.delete', $file) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit">حذف</button>
</form>
</li>
@endforeach
</ul>
قم بتحديث ملف web.php
لإضافة مسارات التنزيل والحذف:
Route::get('/files', [FileController::class, 'index'])->name('file.index');
Route::get('/files/{file}', [FileController::class, 'download'])->name('file.download');
Route::delete('/files/{file}', [FileController::class, 'destroy'])->name('file.delete');
ثم، أضف الدوال المطلوبة في FileController
:
public function index()
{
$files = Storage::disk('public')->files('uploads');
return view('files', compact('files'));
}
public function download($file)
{
return Storage::disk('public')->download($file);
}
public function destroy($file)
{
Storage::disk('public')->delete($file);
return back()->with('success', 'تم حذف الملف بنجاح!');
}
في هذه الدوال، نقوم بعرض الملفات المحملة، تنزيلها، أو حذفها باستخدام دوال Storage
المدمجة في Laravel.
الخاتمة
يعد نظام تخزين الملفات في Laravel أداة قوية ومرنة لتحميل وإدارة الملفات في تطبيقات الويب. باستخدام هذه الأدوات، يمكنك بسهولة تحميل الملفات، عرضها، وإدارتها بفعالية وأمان. استمر في استكشاف ميزات Laravel لتحسين تطبيقاتك وتعزيز أدائها.
اترك تعليقاً