【问题标题】:Save user image url in database将用户图像 url 保存在数据库中
【发布时间】:2019-04-21 22:07:41
【问题描述】:

我将图像保存在公共文件夹中,但我需要保存在数据库中的图像 url 而不是文件名。

https://devdojo.com/episode/laravel-user-image

public function update_avatar(Request $request){

      if ($request->hasFile('avatar')){
        $avatar = $request ->file('avatar');



        $fileName = time().'.'. $avatar->getClientOriginalExtension();

        Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/'. $fileName));

        $user = Auth::user();
        $user->avatar = $fileName;
        $user->save();

      }
      return view('profile', array('user' => Auth::user()));
    }

【问题讨论】:

  • 建议不要将路径存储在数据库中,因为它们可能会发生变化,或者如果域发生变化等,那么很难更改数据库中的所有路径。最好将路径保存在 .env 或配置文件中,并将图像名称保存在数据库中
  • “从移动应用程序获取”是什么意思?您需要从您的网络服务器提供图像。

标签: php database laravel


【解决方案1】:

强烈不建议使用这种方法,而是将名称保存在数据库中,并使用数据库中名称的文件路径来显示图像。

例如:

<img class="border-radius-3" src="{{ asset('uploads/avatars/'.$user->image)}}" alt="">

只需告诉我们您要完成的工作即可。

【讨论】:

  • 这是正确的答案 - 保存文件名(或根据模型的主键确定文件名,或类似的东西)。这样你就可以控制域名(你可以改变它,把它放在 CDN 后面等)。此外,其他答案(如 base 64 编码图像)将无法缩放。
  • 你是对的,但我已经将名称保存在数据库中,但我认为将路径或 url 作为字符串保存在数据库中会更容易和更安全,以便在其他情况下重用它
【解决方案2】:

如果你需要在数据库中保存文件 URL,你可以使用类似这样的东西

 $user->avatar = '/uploads/avatars/'.$fileName);

【讨论】:

  • 通常最好不要使用域,即$user->avatar = 'uploads/avatars/'.$fileName);,并让 Laravel 使用 url() 助手来处理它,即<img src="{{ url($user->avatar) }}">。这样,如果将来域发生变化,图像不会全部损坏。
  • @ceejayoz 同意。好多了。将修复答案
【解决方案3】:

您应该将 img 转换为 base64 以将其作为字符串存储在 DB 中。

我从不推荐这个,但无论如何:

$data = base64_encode($img); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多