Image and File Upload Tutorial in Laravel 11
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$users = User::get();
return view("file_upload", compact("users"));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
"photo" => "required|mimes:png,jpg,jpeg|max:3000"
]);
//Difference between getClientOriginalExtension() and extension() is that user can change extension so we can't get exact extension in case of getClientOriginalExtension() method
// but extension() method will give exact extension so we mostly use extension() method
// $file = $request->file("photo");
// $extension = $file->getClientOriginalExtension();
// $extension = $file->extension();
// $extension = $file->hashName();
// $extension = $file->getClientMimeType(); //getClientMimeType() method provides type of image/pdf/any_document
// $extension = $file->getSize(); //getSize() method provides file size
// return $extension;
// Add image in Database First way
$file = $request->file("photo");
$path = $request->file("photo")->store("image", "public");
User::create([
"file_name" => $path
]);
// Add image in Database Second way
// $file = $request->file("photo");
// $file->move(public_path("uploads"), $file->getClientOriginalName());
// User::create([
// "file_name" => $file->getClientOriginalName()
// ]);
// Usage of store() method
// $path = $request->file("photo")->store("image","local"); //First way
// $path = $request->photo->store("image","local"); //second way
// $path = $request->file("photo")->store("image","public");
// return $path;
// Usage of storeAs() method
// getClientOriginalName() method will given original name of user file means User file name will not rename, it will remain as it is
// $fileName = time() . "_" . $file->getClientOriginalName();
// $path = $request->file("photo")->storeAs("image", $fileName, "public");
// return $path;
return redirect()->route("user.index")->with("status", "User Image Uploaded Successfully.");
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$user = User::find($id);
return view("file_update", compact("user"));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$user = User::find($id);
if ($request->hasFile("photo")) {
$image_path = public_path("storage/") . $user->file_name;
if (file_exists($image_path)) {
@unlink($image_path);
}
$path = $request->file("photo")->store("image", "public");
$user->file_name = $path;
$user->save();
return redirect()->route("user.index")->with("status", "User Image Updated Successfully.");
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$user = User::find($id);
$user->delete();
$image_path = public_path("storage/") . $user->file_name;
if (file_exists($image_path)) {
@unlink($image_path);
}
return redirect()->route("user.index")->with("status", "User Image Data Deleted Successfully.");
}
}
Above File is app\Http\Controllers\UserController FileBelow File is app\Models\User File
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public $timestamps = true;
protected $table = "users";
protected $fillable = ["file_name"];
}
Below File is database\migrations\2024_12_19_061355_create_users_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('users', function (Blueprint $table) {
$table->id();
$table->string("file_name");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('users');
}
};
Below File is resources\views\file_update.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">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="text-center mb-2">Update : File Upload</h2>
</div>
</div>
<form action="{{ route("user.update", $user->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method("PUT")
<div class="row">
<div class="col-3">
<img id="output" class="img-fluid img-thumnail" src="{{ asset("/storage/".$user->file_name) }}" alt="">
</div>
<div class="col-9">
<input type="file" onchange="document.querySelector('#output').src=window.URL.createObjectURL(this.files[0])" class="form-control @error("photo") is-invalid @enderror" name="photo" accept=".jpg,.png,.jpeg">
@error("photo")
<div class="alert alert-danger mb-1 mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-9 mt-5">
<input type="submit" value="Update" class="btn btn-sm btn-primary">
</div>
</div>
</form>
</div>
</body>
</html>
Below File is resources\web\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">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="text-center mb-2">File Upload</h2>
</div>
</div>
<form action="{{ route("user.store") }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-12">
<input type="file" class="form-control @error("photo") is-invalid @enderror" name="photo" accept=".jpg,.png,.jpeg">
@error("photo")
<div class="alert alert-danger mb-1 mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-12 mt-5">
<input type="submit" class="btn btn-sm btn-primary">
</div>
</div>
</form>
<div class="row mt-3">
<div class="col-6">
@if(session("status"))
<div class="alert alert-success">
{{ session("status") }}
</div>
@endif
</div>
</div>
<div class="row">
@foreach($users as $data)
<div class="col-2">
<img class="img-fluid img-thumbnail" src="{{ asset("/storage/". $data->file_name) }}" alt="">
<form action="{{ route("user.destroy", $data->id) }}" method="POST">
@csrf
@method("DELETE")
<button type="submit" class="btn btn-danger btn-sm mt-3 mb-3">Delete</button>
</form>
<a href="{{ route("user.edit", $data->id) }}" class="btn btn-warning">Update</a>
</div>
@endforeach
</div>
</div>
</body>
</html>
Below File is routes\web File
.png)
.png)
.png)
.png)
.png)
.png)
Comments
Post a Comment