Files
boursecu_server/app/Http/Controllers/Admin/FileController.php
T
2026-07-16 17:45:43 +03:30

74 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
/**
* make directory in Public Storage By Date
*
* @return string
*/
protected function createDir(): string
{
$now = Verta();
$path = preg_replace('/-/', '/', $now->formatDate());
$disk = Storage::disk('public');
if (! $disk->exists($path)) {
$disk->makeDirectory($path);
$disk->makeDirectory($path.'/thumb');
}
return $path;
}
public function store(Request $request)
{
$uploaded = $request->file('file');
if (! $uploaded || ! $uploaded->isValid()) {
return response()->json(['message' => 'فایل بارگذاری نشد یا خالی است'], 422);
}
if ($uploaded->getSize() < 1) {
return response()->json(['message' => 'فایل خالی است'], 422);
}
$path = $this->createDir();
$originalName = $uploaded->getClientOriginalName();
$ext = $uploaded->getClientOriginalExtension()
?: $uploaded->extension()
?: 'jpg';
$title = $request->input('title') ?: $originalName;
$file_name_src = md5(time().$originalName);
$file_name = $file_name_src.'.'.$ext;
$stored = Storage::disk('public')->putFileAs($path, $uploaded, $file_name);
if (! $stored || ! Storage::disk('public')->exists($stored)) {
return response()->json(['message' => 'ذخیره فایل روی سرور ناموفق بود'], 500);
}
$relativePath = 'storage/'.$stored;
$file_create = File::create([
'original_name' => $originalName,
'ext' => $ext,
'title' => $title,
'has_thumb' => false,
'size' => $uploaded->getSize(),
'src' => $relativePath,
'user_id' => auth()->id(),
]);
$fullSrc = File::publicUrl($relativePath);
$payload = $file_create->fresh()->toArray();
$payload['path'] = $relativePath;
$payload['full_src'] = $fullSrc;
$payload['src'] = $fullSrc;
return response()->json($payload);
}
}