• 0

خطأ أثناء رفع ملف في Laravel

أستخدم لارافيل و أحاول رفع ملف و حفظه:

public function test(Request $request) {

        $fileInForm = 'file';
        if ($request->hasFile($fileInForm)) {
            
            $file = $request->file($fileInForm);
            if ($file->isValid()) {

                $hashedName = hash_file('md5', $file->path());
                
                $timestamp = microtime();

                $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();
    
                Storage::disk('local')->put($newFilename, $file);
            }
        }
    }

لكن المُشكلة أن الملف يتم حفظه في مُجلد باسم مُختلف في كل مرة و إسم المُجلد يكون نفس الإسم الذي أضعه. هل يُمكن حفظ الملف في مجلد واحد و ليس كل ملف في مجلد لوحده.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

تحدث هذه المُشكلة لك بسبب أنك حددت إسم المُجلد في المُعامل الأول للدالة put، مثلاً إن كنت تريد وضع الملفات داخل مُجلد images يُمكنك ذلك من خلال:

public function test(Request $request) {

        $fileInForm = 'file';

        if ($request->hasFile($fileInForm)) {

            $file = $request->file($fileInForm);
            if ($file->isValid()) {
    
                // Filename is hashed filename + part of timestamp
                $hashedName = hash_file('md5', $file->path());
    
                $timestamp = microtime();

                $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();
    
                Storage::disk('local')->putFile('images', $file);

            }
        }
    }

في هذه الحالة سيتم حفظ الملفات داخل مُجلد images و ستُعطي لارافيل إسم مُختلف للملف المرفوع في كل مرة تلقائياً، و ستُرجع الدالة putFile المسار الذي تم حفظ الملف فيه يُمكنك حفظه إن احتجت له.

إن كنت ترغب في وضع الإسم الذي يُحفظ به الملف بنفسك يُمكنك إستخدام الدالة putFileAs بنفس الطريقة و تُمرر الإسم الذي ترغب فيه كمعامل ثالث:

public function test(Request $request) {

        $fileInForm = 'file';

        if ($request->hasFile($fileInForm)) {

            $file = $request->file($fileInForm);
            if ($file->isValid()) {
    
                // Filename is hashed filename + part of timestamp
                $hashedName = hash_file('md5', $file->path());
    
                $timestamp = microtime();

                $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();
    
                Storage::disk('local')->putFileAs('images', $file, $newFilename);

            }
        }
    }

تُرجع الدالة أيضاً مسار الملف.

تُتيح لارافيل أيضاً دالتي store و storeAs لكن هاتين الدالتين لا تُستخدمان بإستعمال الfacade بل مُباشرة على الملف بهذا الشكل مثلاً:

$path = $request->file('file')->store('images');

$path = $request->file('file')->storeAs(
    'images', $newName
);

 

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن