From b0ac2c78629fce18da90171d21579fb486149a85 Mon Sep 17 00:00:00 2001 From: adonis Date: Mon, 29 Jun 2026 20:16:28 +0330 Subject: [PATCH] fix pictures 5 --- app/Http/Controllers/Admin/FileController.php | 16 ++++- .../Controllers/PublicStorageController.php | 58 +++++++++++++++++++ routes/web.php | 5 ++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/PublicStorageController.php diff --git a/app/Http/Controllers/Admin/FileController.php b/app/Http/Controllers/Admin/FileController.php index c6e1067..9d77b89 100644 --- a/app/Http/Controllers/Admin/FileController.php +++ b/app/Http/Controllers/Admin/FileController.php @@ -51,7 +51,21 @@ class FileController extends Controller $file_name = $file_name_src.'.'.$data['ext']; $data['has_thumb'] = false; $data['size'] = $uploaded->getSize(); - Storage::disk('public')->putFileAs($path, $uploaded, $file_name); + $stored = Storage::disk('public')->putFileAs($path, $uploaded, $file_name); + if (! $stored) { + return response()->json(['message' => 'ذخیره فایل روی سرور ناموفق بود'], 500); + } + + $storageFile = storage_path('app/public/'.$path.'/'.$file_name); + $publicFile = public_path('storage/'.$path.'/'.$file_name); + if (! is_file($publicFile) && is_file($storageFile)) { + $publicDir = dirname($publicFile); + if (! is_dir($publicDir)) { + mkdir($publicDir, 0755, true); + } + @copy($storageFile, $publicFile); + } + $data['src'] = 'storage/'.$path.'/'.$file_name; $data['user_id'] = auth()->id(); $data['sts'] = 1; diff --git a/app/Http/Controllers/PublicStorageController.php b/app/Http/Controllers/PublicStorageController.php new file mode 100644 index 0000000..2a2a44c --- /dev/null +++ b/app/Http/Controllers/PublicStorageController.php @@ -0,0 +1,58 @@ +sanitizeRelativePath($path); + if ($path === '') { + abort(404); + } + + $fullPath = $this->resolveReadablePath($path); + if ($fullPath === null) { + abort(404); + } + + return response()->file($fullPath); + } + + private function sanitizeRelativePath(string $path): string + { + $path = str_replace('\\', '/', $path); + $path = ltrim($path, '/'); + + if ($path === '' || str_contains($path, '..')) { + return ''; + } + + return $path; + } + + private function resolveReadablePath(string $path): ?string + { + foreach ($this->candidatePaths($path) as $fullPath) { + if (is_file($fullPath) && is_readable($fullPath)) { + return $fullPath; + } + } + + return null; + } + + /** + * @return list + */ + private function candidatePaths(string $path): array + { + return [ + storage_path('app/public/'.$path), + public_path('storage/'.$path), + ]; + } +} diff --git a/routes/web.php b/routes/web.php index 0a4c940..5710948 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ where('path', '.*'); + Route::get('/refPricer', function () { $ok = app(\App\Services\ProductPriceSyncService::class)->syncAll(true);