رتبه موضوع:
  • 2 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش آپلود فایل در لاراول 5
#1
الا نوبت این است که با یک مثال کاربردی نحوه آپلود فایل در لاراول رو کار کنیم. فرض کنید می خواهیم در جدول posts یک مطلب جدید را اضافه کنیم که این مطلب دارای یک تصویر هم می باشد که قرار است آن را در مسیر public/uploads ذخیره کنیم. فرض میکنیم در جدول posts ستونهای (id, title, body, pic_name) وجود دارد.

یک فایل view به نام form.blade.php در مسیر resources/views ایجاد کنید و کدهای زیر را داخل آن قرار دهید :

کد پی‌اچ‌پی:
<!DOCTYPE html>
<
html lang="en">
<
head>
 
   <meta charset="UTF-8">
 
   <title>form validation</title>
 
   <style type="text/css">
 
       .error {
 
           colorred;
 
           font-weightbold;
 
       }
 
       .success {
 
           colorgreen;
 
           font-weightbold;
 
       }
 
   </style>
</
head>
<
body>
 
   <form action="{{ url('add-post') }}" method="post" enctype="multipart/form-data">
 
       <input type="hidden" name="_token" value="{{ csrf_token() }}">
 
       <label for="title">Title</label>
 
       <input type="text" name="title" id="title" value="{{ old('title') }}">
 
       <span class="error">{{ $errors->first('title') }}</span><br>

 
       <label for="post">Post</label>
 
       <textarea name="post" id="post">{{ old('post') }}</textarea>
 
       <span class="error">{{ $errors->first('post') }}</span><br>

 
       <label for="photo">Select an Image:</label>
 
       <input type="file" name="photo" id="photo">
 
       <span class="error">{{ $errors->first('photo') }}</span><br>

 
       <input type="submit" value="Submit">
 
   </form>
 
   <class="success">{{ session('message') }}</p>
 
   <class="error">{{ session('error') }}</p>
</
body>
</
html


اکنون مسیر های زیر را در فایل routes.php تعریف میکنیم :


کد پی‌اچ‌پی:
Route::get('add-post''PostController@getAddPost');
 
Route::post('add-post''PostController@postAddPost'); 


همانطور که می بینید باید یک کنترلر به نام PostController داشته باشیم و متدهای getAddPost و postAddPost را داخل آن تعریف کنیم.

ابتدا برای رندر کردن فایل ویو متد getAddPost را به صورت زیر بنویسید :


کد پی‌اچ‌پی:
public function getAddPost()
{
 
   return view('form');



کد های زیر را هم در متد postAddPost قرار دهید :


کد پی‌اچ‌پی:
public function postAddPost(Request $request)
{
 
   $rules = [
 
       'title' => 'required|max:255|unique:posts',
 
       'post' => 'required',
 
       'photo' => 'required|image|max:1024',
 
   ];
 
   $v Validator::make($request->all(), $rules);
 
   if($v->fails()){
 
 
       return redirect()->back()->withErrors($v->errors())->withInput($request->except('photo'));
 
    
    
} else {
 
        
        $file 
$request->file('photo');
 
       if($file->isValid()){
 
           $fileName time().'_'.$file->getClientOriginalName();
 
           $destinationPath public_path().'/uploads';
 
           $file->move($destinationPath$fileName);
 
           $post = new Post;
 
           $post->title $request->input('title');
 
           $post->body $request->input('post');
 
           $post->pic_name $fileName;
 
           $post->save();
 
 
           return redirect()->back()->with('message''The post successfully inserted.');
 
       } else {
 
           return redirect()->back()->with('error''uploaded file is not valid.');
 
       }
 
   }



همانطور که که می بینید ابتدا مقادیر فرم را اعتبارسنجی کردیم. برای فایل هم با قانون max مشخص کردم که فایل فقط می تواند ۱۰۲۴ کیلوبایت سایز داشته باشد و همچنین با قانون image مشخص میکنیم که فایل از نوع تصویر باشد فقط mime type های (jpeg, png, bmp, gif, or svg) را قبول میکند. در صورتی که می خواهید محدودیت بیشتری برای mime type فایل در نظر بگیرید یا اصلا فایل شما تصویر نیست می توانید با استفاده از قانون [url=http://laravel.com/docs/5.0/validation#rule-mimes][/url]mime نوع فایل را مشخص کنید. در صورتی که اعتبارسنجی دارای خطا باشد به فرم برگشته و خطاها نمایش داده می شوند. 

سپس اطلاعات فایل رو در متغیر file$ قرار دادم و با استفاده از متدهای کلاس UploadedFile می توانیم به اطلاعات فایل دسترسی داشته باشیم. نام فایل را تلفیقی از timestamp جاری و نام اصلی فایل تعیین کردم تا احتمال اینکه نام فایل تکراری باشد وجود نداشته باشد و داخل متغیر fileName$ قرار دادم. مسیر آپلود فایل را در destinationPath$ قرار دادم و با استفاده از متد move فایل را آپلود میکنیم. این متد مسیر آپلود و نام فایل را به عنوان پارامتر میگیرد.

در نهایت سایر مقادیر فرم به همراه نام فایل را در جدول posts درج میکنیم. در صورت موفقیت یا عدم موفقیت نیز پیغام های خطایی را ست و در ویو چاپ میکنیم.


اکنون هرقسمت از وبسایت که می خواهیم پست ها را نمایش دهیم به راحتی می توانیم تصویر را هم با استفاده از نام آن نمایش دهیم:


کد پی‌اچ‌پی:
<img src="{{ asset('uploads/'.$post->pic_name) }}" alt="{{ $post->pic_name }}" 
قوانین انجمن لاراولیستا  | شماره تماس :‌09124783045 |‌ تلگرام :‌ 09377869283
پاسخ
#2
من از همین کد استفاده می کنم ولی وقتی حجم عکس بیش از 2 مگا بایت می شود ارور csrf token mismatch پیش میاد و با disable کردن csrf protection برای این route بهد از عمل پست کلیه فیلد های فرم بدون مقدار و خالی برای کنترولر پست ارسال میشه!! تغیرات فایل php.ini رو هم انجام دادم
پاسخ
#3
سایز فایل رو تو اعتبارسنجی 1024 گزاشته باید بیشترش کنی
پاسخ
#4
(12-08-2015, 07:46 PM)hamo نوشته:  سایز فایل رو تو اعتبارسنجی 1024 گزاشته باید بیشترش کنی

منظورم از اینکه از همین کد استفاده کردم این نبود که دقیقا عین همین، این تغییر رو متناسب با پروژه خودم تغییر داده بودم ولی باز مشکل پابرجاست!!
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 774 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  آموزش روتینگ routing در لاراول 5 alihossein 2 1,129 11-12-2016, 04:37 AM
آخرین ارسال: حمید رﺽا کمالی
  جلوگیری از دسترسی کاربران به فولدرها و فایل های وبسایت amindeist 3 54 10-31-2016, 07:09 PM
آخرین ارسال: LavarelUser
  آموزش کار با دیتابیس در لاراول 5 alihossein 6 1,555 10-27-2016, 01:01 PM
آخرین ارسال: sempaisaleh
  ایجاد نشدن همه فایل ها بعد از نصب لاراول armin4838 1 71 10-15-2016, 04:17 PM
آخرین ارسال: armin4838
  آموزش Migration در لاراول 5 alihossein 9 1,167 08-15-2016, 04:17 PM
آخرین ارسال: Naser.SherafatiNia
  آموزش فارسی لاراول ۵ alihossein 4 2,865 07-22-2016, 04:16 PM
آخرین ارسال: elham_malekmohamadi
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 0 235 04-25-2016, 04:54 PM
آخرین ارسال: Bvk.Programmer
  درخواست آموزش کار با پکیج intervention/image Bvk.Programmer 6 492 04-18-2016, 05:52 PM
آخرین ارسال: hamo
  آپلود پروژه لاراول در هاست nilufar 2 260 04-06-2016, 08:31 AM
آخرین ارسال: aligoli

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

انجمن لاراولیستا به عشق توسعه دهنده ها و علاقمندان به این فریم ورک محبوب ایجاد شده و امیدواریم با نظرات خوبتون ما رو در بهبود کار یاری کنید. در ضمن خیلی هم خوشحال میشیم شما هم در توسعه این انجمن سهمی داشته باشید.