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

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...