Upload File using ajax in laravel 11

 <?php


namespace App\Http\Controllers;

use App\Models\Image;
use Illuminate\Http\Request;

class FileUploadController extends Controller
{
    public function index()
    {
        return view("file-upload");
    }

    public function store(Request $request)
    {
        $request->validate([
            "file" => "required|mimes:jpg,png|max:2048"
        ]);
        $fileName = time() . "." . $request->file->extension();

        $request->file->move(public_path("file"), $fileName);

        Image::create(["name" => $fileName]);

        return response()->json("File uploaded successfully");
    }
}
Above File is app\Http\Controllers\FileUploadController.php File






Below File is app\Models\Image.php File
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    public $timestamps = true;
    protected $table = "images";
    protected $fillable = ["name"];
}





Below File is database\migrations\2025_01_03_120519_create_images_table File
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('images', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('images');
    }
};






Below File is resources\views\file-upload.blade.php File
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>File Upload</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-10 mt-5">
                <div class="card">
                    <div class="card-header">
                        <h3>File Upload</h3>
                    </div>
                    <div class="card-body">
                        <form id="fileUpload" enctype="multipart/form-data">
                            @csrf
                            <label>Select File</label>
                            <input type="file" class="form-control" name="file"/>
                            <br><br>
                            <button type="submit" class="btn btn-secondary">Upload</button>
                            <span id="error" style="color:#ff0000;"></span>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        $(document).ready(function(){
            $("#fileUpload").submit(function(e){
                e.preventDefault();
                $("#error").text("");
                var formData = new FormData(this);

                $.ajax({
                    url:"{{ route('file.store') }}",
                    type:"POST",
                    data:formData,
                    contentType:false,
                    processData:false,
                    success:function(response){
                        if(response) {
                            alert("File uploaded successfully");
                        }
                    },
                    error:function(response){
                        $("#error").text(response.responseJSON.message);
                    }
                });
            });
        });
    </script>
</body>
</html>





Below File is routes\web.php File
<?php

use App\Http\Controllers\FileUploadController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::controller(FileUploadController::class)->group(function () {
    Route::get("/file-upload", "index");
    Route::post("/file-upload", "store")->name("file.store");
});




Comments

Popular posts from this blog

Eloquent Many to Many Relationship Tutorial in Laravel 11

Eloquent with JSON Data Columns Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11