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

السؤال

نشر

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

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);
            }
        }
    }

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

Recommended Posts

  • 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
);

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...