Search code examples
laravellaravel-8

Laravel 8: File Upload with Original File Name and Extension


I currently have an API where it saves the uploaded image but it hashes it, turns it into strings but what I want to do now is to retain the original name of the image in the database, not the string-type.

Image Controller:

namespace App\Http\Controllers;

use App\Models\LessonIMG;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class LessonIMGController extends Controller
{
    public function FileUpload(Request $request, $id)
    {
        $rules = [  
            'file' => 'required',
        ];

        $validator = Validator::make($request->all(), $rules);
        if ($validator->fails()) {
            return response()->json($validator->errors(), 400);
        }
        
        $uploaded_files = $request->file->store('public/uploads/');
        
        $lesson = LessonIMG::find($id);
        $lesson->lesson_image = $request->file->hashName();

        $results = $lesson->save();
        if ($results) {
            return ["result" => "Image Added"];
        } else {
            return ["result" => "Image Not Added"];
        }

        return ["result" => $uploaded_files];
    }

    public function DeleteIMG($id)
    {
        $lesson = LessonIMG::find($id);
        if (is_null($lesson)) {
            return response()->json('Record not found!', 401);
        }

        $lesson->update(['lesson_image' => null]);

        return response('Image Deleted', 200);
    }
}

Any help/suggestion would be appreciated. Thank you!


Solution

  • You can get any file attribute from the request in your controller as it is documented in here. A full reference of file methods is available in here

    $file_extension = $request->file->extension();
    $file_mime_type = $request->file->getClientMimeType();
    $original_file_name = $request->file->getClientOriginalName();
    
    $uploaded_files = $request->file->store('public/uploads/');