اذهب إلى المحتوى
  • 0

كيف يمكننى تخزين الصور في laravel

حسام شبل

السؤال

Recommended Posts

  • 1

ستحتاج في هذا إنشاء :

  • ملف عرض : لعرض نموذج الإدخال و رفع الصورة و تقديمها إلى الواجهة الخلفية .
  • متحكم : ليحتوي تابعا يتولى مهمة التحقق من المدخلات و فحص ملف الصورة و تخزينه .
  • مسارين : واحد لعرض نموذج رفع الصورة أو الملف و واحد لإستهداف تابع المتحكم الخاص بالرفع .

تعريف المسارين بداخل ملف web.php سيكون كالتالي : 

Route::view('/upload-image' ,'upload-image'); # إعادة ملف عرض 
Route::post('/upload-image' , 'UploadImageController@store'); # store إستهداف تابع المتحكم 

ملف العرض upload-image.blade.php سيحتوي بنية HTML مشابهة للتالي : 

<form action="/upload-image" method="POST" enctype="multipart/form-data" > <!-- يجب تحديد نوع التشفير -->
    @method('POST')
    @csrf
  
    <div class="form-group">
        <label>صورة</label>
        <input type="file" name="image" required>
    </div>
    <button type="submit">رفع الملف</button>
</form>

 المتحكم UploadImageController.php سيحتوي التابع store بالشيفرة التالية : 

public function store(Request $request) {
   
   // التأكد من أن الطلب يمتلك بالفعل ملف
   if ($request->hasFile('image')) {
      
      // التحقق من الملف صورة بلاحقة ملف صورة
      $request->validate([
         'image' => 'mimes:jpeg,bmp,png' 
      ]);

      // images في مجلد app/storage/public تخزين الملف محليا في مجلد 
      $request->image->store('images', 'public');

   }

   return back();

}

 بعد تقديم النموذج و نجاح التحميل سيمكنك الوصول إلى الملفات المخزنة عن طريق التصفح إلى المسار : 

app/storage/public/images

و ستلاحظ وجود ملف الصورة المرفوعة حديثا . 

هذا لن يكفي لجعل الصورة قابلة للوصول , فلا يزال عليك إنشاء الرابط الرمزي بين المسارين : 

storage/public/

و : 

public/storage

سيمكن هذا عن طريق تنفيذ الأمر : 

php artisan storage:link

ستلاحظ إنشاء رابط رمزي بين المجلد storage داخل public و public داخل app/storage . 

و يمكنك الوصول إلى رابط هاته الصور عن طريق التابع hashName في : 

// images في مجلد app/storage/public تخزين الملف محليا في مجلد 
$request->image->store('images', 'public');


$filePath = '/storage' .$request->file->hashName(); 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

أولا يجب إنشاء controller يحتوي علي function بإسم uploadImage كالأتي 

public function uploadImage(Request $request){
        $file     = $request->file('photo');
        $fileName = time() . '-' . $file-> getClientOriginalName();
        
        $file->move(images , $fileName);
        
		Items::create([
			'image'=>$fileName
		])
    }

كما ترى في الكود السابق 

أولا يتم تخزين الملف في متغير يسمى file$ 

ثم تخزن إسم الملف مضافا إليه الوقت لكي تعطي إسم مميز لكل صورة في متغير يسمى fileName$

ثم تخزن الملف في مجلد images الذي تم إنشائه في مجلد public عن طريق استخدام function تسمى move 

ثم يخزن إسم الملف في قاعدة البيانات 

و تستطيع أن ترسل الملف عن طريق الblade  من خلال الform   الأتية

  <form method="POST" action="{{ route('items.insert') }}" enctype="multipart/form-data">
                @csrf
                <div class="form-group">
                    <label for="exampleInputPassword1">photo</label>
                    <input type="file" name="photo" class="form-control" id="exampleInputPassword1">
                    @error('photo')
                        <small style="color: red">
                            {{ $message }}
                        </small>
                    @enderror
                </div>

                <button type="submit" class="btn btn-primary">Submit</button>
            </form>

و يجب أن تحتوي الform علي enctype attribute مساوي ل multipart/form-data لكي ترسل الملف

وال input يجب أن يحتوي على attribute type مساوي ل file  

و تنشأ route كالأتي 

Route::post   ('/post' , 'ItemsController@create')->name('items.insert');

 

تم التعديل في بواسطة Ziyad Hasan
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...