检索保存在数据库中的图像

Retrieve imaged saved in DB

我遇到以下问题: 图像的路径正在存储到数据库中,但存储文件夹中的实际文件是一个完全不同的名称,我找不到检索显示在视图中的方法:

public 函数 savePicture(请求 $request){

if($request->hasFile('image')) {
    $image_name = $request->file('image')->getClientOriginalName();
    $image_path = $request->file('image')->store('public');
    $image = Image::make(Storage::get($image_path))->resize(320,240)->encode();
    Storage::put($image_path,$image);
    $image_path = explode('/',$image_path);
    $user_id = $request->input('user_id');
    $user = User::find(Auth::user()->id);
    $user->image = Storage::url($image_name);
    $user->save();
    return back();
} else{
    return "No file selected";
}

这是获取路径的查询,但无法使其工作,因为它是一个对象并且 $pic->image 在视图中不起作用

$imagen = DB::table('users')
            ->select('image')
            ->where('id', '=', Auth::user()->id);

return view('/tablero', [
  'posts' => $posts,
  'pic' => $image,
  ]);

我的数据库很像

图片:/storage/name.png

但是在我的存储文件夹中我得到 d7f7r87RmMy4NtCFvbJ8sQeutfC5wtsiak7GZXcn.png

我一直在尝试不同的方式来显示图像,但它不起作用。我错过了什么?

路径中不需要加$image_name吗

$image_path = $image_path . '/'. $image_name;

在你做之前

Storage::put($image_path,$image);

您正在使用文件的原始名称将文件存储在数据库中,但使用存储方法返回给您的名称保存在存储目录中。所以你可以做

$user->image = $image_path;

而不是

$user->image = Storage::url($image_name);

或者如果您想将文件的原始名称保存到数据库和存储中,您可以这样做

Storage::put($image_name, $image);
$user->image = Storage::url($image_name);

使用 store() 方法 Laravel 为文件生成一个随机名称。您应该使用 storeAs() 方法,该方法允许您提供要用来保存文件的名称。

$image_name = $request->file('image')->getClientOriginalName();
$image_path = $request->file('image')->storeAs('path/to/storage', $image_name);