File Manager Lite
Dir:
/home/codewavebd/public_html/app/Http/Controllers/Admin
Upload
[..]
DashboardController.php (1.79 KB)
Edit
Rename
Del
FaqController.php (1.92 KB)
Edit
Rename
Del
LeadController.php (4.11 KB)
Edit
Rename
Del
MediaController.php (3.71 KB)
Edit
Rename
Del
TestimonialController.php (2.05 KB)
Edit
Rename
Del
Edit: MediaController.php
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\ActivityLog; use Illuminate\Http\Request; use Illuminate\Support\Facades\File; class MediaController extends Controller { public function index() { $uploadPath = public_path('uploads'); if (!File::exists($uploadPath)) { File::makeDirectory($uploadPath, 0755, true); } $files = File::files($uploadPath); $mediaFiles = []; foreach ($files as $file) { $name = $file->getFilename(); $mediaFiles[] = [ 'name' => $name, 'url' => asset('uploads/' . $name), 'size' => round($file->getSize() / 1024, 2) . ' KB', 'time' => date('Y-m-d H:i:s', $file->getMTime()), ]; } // Sort by time descending usort($mediaFiles, fn($a, $b) => strcmp($b['time'], $a['time'])); return view('admin.media.index', compact('mediaFiles')); } public function upload(Request $request) { $request->validate([ 'file' => 'required|image|mimes:jpeg,png,jpg,gif,webp|max:5120', // Max 5MB ]); $file = $request->file('file'); $originalName = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME); $slugName = str()->slug($originalName); $fileName = $slugName . '_' . time() . '.webp'; $uploadPath = public_path('uploads'); if (!File::exists($uploadPath)) { File::makeDirectory($uploadPath, 0755, true); } $destFile = $uploadPath . '/' . $fileName; // Convert image to WebP using GD library $imageType = $file->getClientOriginalExtension(); $srcImage = null; switch (strtolower($imageType)) { case 'jpeg': case 'jpg': $srcImage = imagecreatefromjpeg($file->getRealPath()); break; case 'png': $srcImage = imagecreatefrompng($file->getRealPath()); // Preserve transparency imagealphablending($srcImage, false); imagesavealpha($srcImage, true); break; case 'gif': $srcImage = imagecreatefromgif($file->getRealPath()); break; case 'webp': $srcImage = imagecreatefromwebp($file->getRealPath()); break; } if ($srcImage) { // Convert and save as WebP with 80% quality imagewebp($srcImage, $destFile, 80); imagedestroy($srcImage); ActivityLog::log("Uploaded media file: {$fileName} (optimized to WebP)"); if ($request->ajax()) { return response()->json([ 'success' => true, 'url' => asset('uploads/' . $fileName), 'name' => $fileName ]); } return back()->with('success', 'Image uploaded and optimized to WebP successfully!'); } return back()->withErrors(['file' => 'Failed to optimize image. Make sure it is a valid format.']); } public function destroy(Request $request) { $request->validate([ 'filename' => 'required|string' ]); $filename = basename($request->filename); // Prevent folder traversal $filePath = public_path('uploads/' . $filename); if (File::exists($filePath)) { File::delete($filePath); ActivityLog::log("Deleted media file: {$filename}"); return back()->with('success', 'Media file deleted successfully.'); } return back()->withErrors(['filename' => 'File not found.']); } }
Simpan