显示来自 Blade 资源的图像,但不显示来自 Laravel 浏览器链接的图像 Laravel 9

问题描述 投票:0回答:1

我正在寻找一种方法来查看存储中私人文件夹中包含的图像:这里是资产存储/app/private/images/nomefile.jpg 我的问题是我只想通过资产刀片查看图像并且不通过 URL 的完整路径查看它们,这是因为我希望它们不公开,而只能在身份验证后在应用程序中查看,因此通过 asset() 有一种方法。我已经尝试了所有这些,但我不能,这是代码:

控制器:

$request->validate([
            'image' => 'required|image|mimes:jpg,jpeg,png|max:8000'
        ]);
  $imageName = time() . '.' . $request->image->getClientOriginalExtension();

            $request->image->store('images', 'private');

            $imageName = $request->file('image')->hashName();

            $safeImageName = htmlspecialchars($imageName, ENT_QUOTES, 'UTF-8');

            DB::table('aree')->where('id_area', $id)->update(['photo' => $safeImageName]

刀片:

<img src="{{ asset('storage/images/' . $item->photo) }}" alt="Shape2503" />

web.php 用于块 url

Route::get('/storage/images/{path}', [ImageController::class, 'show'])->name('image.show');

块 url 控制器

public function show($path)
    {
        $path = storage_path('storage/images/'. $path);

        return abort(401);
    }

请帮助我

laravel
1个回答
0
投票

您应该首先将时间定义为变量,或者使用 uuid 甚至 uniqueID。 所以你的代码应该是这样的:

$request->validate([
    'image' => 'required|image|mimes:jpg,jpeg,png|max:8000']);

 $image_id = uniqid(); //or something else
 $imageName = $image_id . '.' . $request->image->getClientOriginalExtension();

 $request->image->store('images', 'private');
 $imageName = $request->file('image')->hashName();
 $safeImageName = htmlspecialchars($imageName, ENT_QUOTES, 'UTF-8');

 DB::table('aree')->where('id_area', $id)->update(['photo' => $safeImageName]);
© www.soinside.com 2019 - 2024. All rights reserved.