【问题标题】:how to upload an image and get it's url in Laravel 6如何在 Laravel 6 中上传图片并获取其 url
【发布时间】:2020-06-05 20:37:37
【问题描述】:

我知道这应该是世界上最基本的东西,但不知何故我无法让它发挥作用。我有一个具有图像字段的模型类别

这是上传文件的代码

$uploadedFile = $request->file('image');
$fileName = time().$uploadedFile->getClientOriginalName();
$path = $uploadedFile->move(public_path().'/uploads/categories', $fileName);
$category->image = $path;
$category->save();

当我尝试它时,它实际上上传了图像,但没有显示正确的 url 我想在这样的 img 标签中使用 url

<img src="{{$category->image}}" class="img-fluid"/>

当我打印网址时,我会得到这样的结果

"C:\Projects\duars_web\public/uploads/categories\15822290505.png"

这当然不适用于 img 标签...关于为什么会发生这种情况的任何线索?以及如何为我上传的文件获取正确的 url?

【问题讨论】:

  • 因为public_path 返回一个文件系统路径。你不需要文件系统路径,你需要一个 URL。您可能正在寻找类似asset()laravel.com/docs/5.7/helpers#method-asset
  • 文件上传是可以的,但对于数据库你应该只存储路径。
  • "这当然不会在 img 标签上工作......" 错误。这是图像的路径,它显然可以在src 中工作。
  • @Qumber Rizvi 它可能会起作用......但我不觉得暴露我的文件系统结构是一个好习惯......

标签: php laravel file-upload laravel-6


【解决方案1】:

试试这个:

<img src="{!! asset('images/uploads/categories/logo.svg') !!}" />

【讨论】:

    【解决方案2】:

    您只需要在表格中插入带有扩展名的图像名称:

    if($request->hasFile('image'))
    {
      $image = $request->file('image');
      $image_name = time().$image->getClientOriginalExtension();
      $destinationPath = public_path('/uploads/categories');
      $image->move($destinationPath, $image_name);
    }
    
    $user = new User;
    $user->image = $image_name; // Save only file name
    // More data
    $user->save();
    

    然后在你的刀片上:

    <img src="{!! asset($category->image) !!}" class="img-fluid"/>
    

    <img src="/uploads/categories/{{ $category->image }}" class="img-fluid"/>
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2020-07-03
      • 2017-09-19
      • 2020-04-23
      • 2021-09-30
      • 2013-12-18
      • 2020-03-02
      • 2017-12-12
      • 1970-01-01
      相关资源
      最近更新 更多