برنامه نویسی

آپلود فایل ها در لاراول 10 – انجمن DEV

آپلود فایل ها یکی از ویژگی های رایجی است که اکثر برنامه ها از آن استفاده می کنند و در عین حال یکی از مواردی است که من می بینم بسیاری از افراد با آن دست و پنجه نرم می کنند.

لاراول یک API ساده برای کار با فایل سیستم محلی به سادگی ارائه می دهد:

Storage::putFileAs('images', $request->file('file'));
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اغلب کاربر نیاز به بررسی اعتبار فایل دارد، حجم فایل، ابعاد، نام، دید، مسیر، دیسک و غیره.

ما می خواهیم فرمی ایجاد کنیم که به ما امکان می دهد یک فایل را آپلود و ارسال کنیم – و یک مسیر این فرم را می پذیرد، ورودی را تأیید می کند و بارگذاری را مدیریت می کند.

با این مقاله، آموزش آپلود فایل گام به گام لاراول 10 را با استفاده از بسته erlandmuchasaj/laravel-file-uploader انجام می دهم.
در این آموزش ما 2 مسیر را ایجاد می کنیم.
یکی برای ایجاد فرمی که کاربر در آن فایل را آپلود کند و دیگری مسیری برای آپلود فایل با استفاده از بسته.
ما یک فرم ساده با استفاده از اجزای رابط کاربری Bootstrap Form ایجاد خواهیم کرد.

اول از همه، اجازه می دهد تا یک پروژه کاملاً جدید لاراول را راه اندازی کنیم.
ابزار خط فرمان را باز کرده و دستور زیر را برای ایجاد یک پروژه لاراول از ابتدا اجرا کنید.

composer create-project laravel/laravel --prefer-dist laravel-file-uploader
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس وارد دایرکتوری پروژه تازه ایجاد شده می شویم:

cd laravel-file-uploader
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس بسته لاراول-فایل-آپلودر را نصب می کنیم.

composer require erlandmuchasaj/laravel-file-uploader
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آن ما یک پیوند نمادین برای دسترسی به فایل هایی که قرار است برای عموم قابل دسترسی باشند ایجاد می کنیم.
به طور پیش فرض، public دیسک از local درایور و فایل های خود را در آن ذخیره می کند storage/app/public.

برای دسترسی به این فایل ها از وب، باید یک پیوند نمادین از آن ایجاد کنید public/storage به storage/app/public.

برای ایجاد پیوند نمادین، می توانید از دستور storage:link Artisan استفاده کنید:

php artisan storage:link
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مسیرها را ایجاد کنید.

رفتن به route/web.php و 2 مسیر اضافی ایجاد کنید. اولی به تجسم فرم رسیدگی می کند و دیگری فرم درخواست POST را مدیریت می کند.

use ErlandMuchasaj\LaravelFileUploader\FileUploader; // <= import the package
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;


// visualize the form
Route::get('/files', function (Request $request) {
    return view('files');
})->name('files');

// handle the post request
Route::post('/files', function (Request $request) {

    $max_size = (int) ini_get('upload_max_filesize') * 1000;

    $extensions = implode(',', FileUploader::images());

    $request->validate([
        'file' => [
            'required',
            'file',
            'image',
            'mimes:' . $extensions,
            'max:'.$max_size,
        ]
    ]);

    $file = $request->file('file');

    $response = FileUploader::store($file);

    return redirect()
            ->back()
            ->with('success','File has been uploaded.')
            ->with('file', $response);
})->name('files.store');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ساخت فایل های blade در لاراول

در این مرحله نمایی را ایجاد می کنیم که فرم آپلود کننده فایل در آن قرار می گیرد.
یک فایل جدید در resources/views/files.blade.php و مطالب زیر را قرار دهید:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>File uploader</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
    </head>
    <body class="antialiased">
        <div class="container">
            <div class="row">
                <div class="col-12">
                    @if ($message = Session::get('success'))
                        <div class="alert alert-success alert-dismissible fade show" role="alert">
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                            <strong>{{ $message }}</strong>
                        </div>
                    @endif
                    @if (count($errors) > 0)
                        <div class="alert alert-danger alert-dismissible fade show" role="alert">
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                            <ul class="mb-0 p-0">
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif
                </div>
                <div class="col-12 py-5">
                    <div class="card my-5">
                        <div class="card-header">
                           <h3>Laravel File Uploader</h3>
                        </div>
                        <div class="card-body">
                            <form method="POST" action="{{ route('files.store')  }}" enctype="multipart/form-data">
                                @method('POST')
                                @csrf
                                <div class="mb-3">
                                    <label for="formFileLg" class="form-label">File input example</label>
                                    <input name="file" class="form-control form-control-lg" id="formFileLg"
                                           type="file">
                                </div>
                                <div class="mb-3">
                                    <button type="submit" value="submit" class="btn btn-primary">Upload</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
    </body>
</html>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این فرم را به کاربر نشان می دهد تا فایل ها را آپلود کند. فرم موجود در این الگوی view به مسیری با نام اشاره می کند files.store که قبلا در آن ایجاد کردیم routes/web.php فایل.

فرم آپلود لاراول

این برای این آموزش است.

اگر به اطلاعات بیشتری در مورد بسته استفاده شده نیاز دارید، می توانید اطلاعات بیشتری را در زیر بخوانید:

یک بسته آپلود کننده فایل لاراول ساده و در عین حال قدرتمند

Laravel File Uploader یک راه آسان برای آپلود فایل ها در دیسک های مختلف ارائه می دهد. هدف اصلی بسته حذف کدهای تکراری و دست و پا گیر و ساده سازی آن به چند روش ساده است.

نصب و راه اندازی

می توانید بسته را از طریق composer نصب کنید:

composer require erlandmuchasaj/laravel-file-uploader
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده

این بسته کاربرد بسیار آسان و مستقیمی دارد فقط بسته را وارد کنید و فایل را به عنوان پارامتر ارسال کنید و بقیه کارها را انجام می دهد.

use ErlandMuchasaj\LaravelFileUploader\FileUploader
Route::post('/files', function (\Illuminate\Http\Request $request) {

    $max_size = (int) ini_get('upload_max_filesize') * 1000;
    
    // FileUploader::images() get all image extensions ex: jpg, png, jpeg, gif, etc.
    // FileUploader::documents() get all documents extensions ex: 'csv', 'html', 'pdf', 'doc', 'docx', 'ppt' etc.
    $extensions = implode(',', FileUploader::images());

    $request->

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مفید بود؟

اگر تا به حال از این بسته در هر یک از پروژه های خود استفاده کرده اید، در بخش نظرات زیر به من اطلاع دهید.

فراموش نکنید که پسندیدن و اظهار نظر.

دنبال کردن من برای نکات بیشتر توسعه وب، بسته های جدید و موارد دیگر.

با تشکر برای خواندن.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا