Upload File or Image on Laravel Through REST API

In this article, we will learn how to create a REST API that would upload files or images to Laravel. Also, it would validate, rename files and save them into the database. Let’s start by creating a file controller, below command creates the controller

php artisan make:controller FileController

Next, create a store method and add a request parameter. Request parameter helps to get files from the HTTP request.

public function store(Request $request){


Request name can be anything, we can name it anything.

$file = $request->file('file_name');

Here, file_name is the name of the request which is passed into the request’s method that name is file.

$imageName = time().'.'.$file->extension();

Above, we are using the time() function that returns the current time and extension() that returns the extension of the file. These two functions make the unique name of the file.

$imagePath = public_path(). '/files';

Next, we need the path of the directory where the file would be uploaded. Before getting the path we need to create the ‘files’ directory inside the public folder. Laravel’s built-in function public_path() returns the public directory path, so to make a complete path  public_path() should be concatenated with the ‘/files’ string.

$file->move($imagePath, $imageName);

Now, we have enough data for Laravel’s built-in function move() which uploads files on the provided path.

public function store(Request $request)
        $file = $request->file('file');
        $imageName = time().'.'.$file->extension();
        $imagePath = public_path(). '/files';

        $file->move($imagePath, $imageName);

        return response()->json([
            "success" => true,
            "message" => "Image has been uploaded successfully."

This method gets the file from the request and then uploads it into the files directory after renaming the file name. Now we need to create a route that would link the store method.

Route::post('save-file', [FileController::class, 'store']);