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

السؤال

نشر

أريد أن أقوم بتخزين صورة قادمة من تطبيق جوال ( فلاتر ) في قاعدة البيانات ( MySQL ) باستخدام Laravel

يعني ال request يتم إرساله لل API

Recommended Posts

  • 1
نشر (معدل)

بداية , لا يمكنك تخزين أي ملفات بقاعدة البيانات Sql , عوضا عن ذلك يمكنك إستخدام الfile systems لتخزين الصورة أو الملف و تخزين باث الصورة أو الملف في قاعدة البيانات .

يتم إستقبال الطلب من قبل اللارافل و معالجته على هذا النحو : 

<?php 

public function uploadImg(Request $request) {
   // التحقق إن كان الطلب يحمل ملف باسم image
   if($request->hasFile('image')) {
            // انشاء اسم بلاحقة للملف
            $name = time()."_".$request->file('image')->getClientOriginalName();
            
            // تخزين الملف بالpublic path 
            $request->file('image')->move(public_path('images'), $name);
   }
   
   //
   return response()->json([ 
            asset("images/$name"), // باث الصورة
            201, // كود الحالة 
            'message' => asset("images/$name") ? 'تم حفظ الصورة' : 'failed'
   ]);
}
تم التعديل في بواسطة Adnane Kadri
  • 1
نشر (معدل)
بتاريخ 21 دقائق مضت قال Mohammed Abu Yousef:

متشكر جدا

طيب أين يتم حفظ الصور؟

إن كنت تعتمد على تخزين محلي فقط يمكنك تخزين الملفات إما في الـ public_path أو الـ storage_path .

في الحالة الأولى ستكون جميع الملفات و الصور المخزنة ظاهرة للعامة و يمكن الوصول إليها ببساطة . تخزن الملفات في :

public > your-folder

و يكون التخزين على هذا النحو : 

<?php 
..
$request->file('image')->move(public_path('your-folder'), $name);

في الحالة الثانية لن يمكن إستدعاء الصور و الملفات إلا عن طريق إنشاء رابط symlink و هاته الطريقة أكثر أمانا و حفظا للخصوصية في حالة ما كانت الملفات و الصور المخزنة حساسة أو خاصة . افتراضيا يتم تخزين هاته الصور و الملفات في :

storage > app > public > your-folder

و التخزين على هذا النحو : 

<?php 
..
$request->file('image')->move(storage_path('your-folder'), $name);

علما أنه يمكنك إدارة و إنشاء ديسكات التخزين بملف config/filesystems.php :

<?php 
  
 ...
 'disks' => [
        
        ...
   
        'storage-path' => [
          'driver' => 'local',
          'root' => storage_path('app').'/uploads',
        ],
   
        'public-path' => [
          'driver' => 'local',
          'root' => public_path().'/uploads',
          'url' => env('APP_URL').'/public_files',
          'visibility' => 'public',
        ]
   
        ...
    ],

ملاحظة : 

يمكنك إنشاء الsymlink عن طريق طباعة الأمر :

php artisan storage:link

 

بتاريخ 28 دقائق مضت قال Mohammed Abu Yousef:

عند الرفع على استضافة، هل يتم حفظ الصور في السيرفر ؟ 

و نفس الأمر بالنسبة للمواقع المرفوعة على السرفرات

 

تم التعديل في بواسطة Adnane Kadri
  • 1
نشر

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

 public function uploadImage(Request $request)
    {
        $request->validate([
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', // تحديد صيغة الصورة وحجمها
        ]);
  
        $imageName = time().'.'.$request->image->extension();  // أعطاء إسم  مناسب للصورة
   
        $request->image->move(public_path('images'), $imageName); //   public/images  رفع الصورة إلى الخادم في مجلد       
   
        return back()
            ->with('success','You have successfully upload image.')
            ->with('image',$imageName);
   
    }

و إجابتا على سؤالك الثاني فالصور تحفظ داخل مجلدات المشروع في الخادم.

فمثلا في هذا المثال ستجد الصورة في مجلد public/images ويمكن أيضا تخزينها في مجلدات أخرى حسب الحاجة.

  • 0
نشر (معدل)

متشكر جدا

طيب أين يتم حفظ الصور؟

قصدي (  عند الرفع على استضافة، هل يتم حفظ الصور في السيرفر ؟ )

تم التعديل في بواسطة Mohammed Abu Yousef

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...