【问题标题】:How do I display image path stored in database PHP? (Laravel Orchid)如何显示存储在数据库 PHP 中的图像路径? (Laravel 兰花)
【发布时间】:2021-04-21 02:30:09
【问题描述】:

我想在我的 Laravel Orchid 管理面板中显示图像。 Orchid 将上传的图片存储在此文件夹中,文件夹名称为上传日期:

storage\app\public\2021\04\21\<name>

Laravel 将图像原始名称、路径、扩展名等存储在一个名为“附件”的特殊表中。它通过 id、“users”中的 image_id 和“attachments”中的 id 链接到我的名为“users”的主表。在我的数据库中,路径存储为日期,例如:

2021/04/21/

我执行了这个 SQL 连接查询来检索图像:

$image = $user->image_id;
$images = DB::table('users')
          ->leftJoin('attachments', 'users.image_id', '=', 'attachments.id')
          ->where('users.image_id', '=', $image)
          ->get(['name', 'original_name', 'path', 'extension']);
            
            foreach($images as $image)
            {
                
                $image_url = $image->path.$image->name.'.'.$image->extension;
                return "<img src='{$image_url}'
                <span class='small text-muted mt-1 mb-0'>{$image->original_name}</span>";
            }

我可以显示原始名称,但图像不显示。我想知道我检索图像的方式是否有问题。谢谢。

【问题讨论】:

  • 看起来&lt;img 标记缺少结束&gt;,它可能需要一个大小(宽度和高度)?
  • 您的图片标签缺少&gt;,我认为您的网址中缺少项目根目录。它应该是这样的:127.0.0.1:8000/publc/path/to/folder
  • 当您在浏览器中检查损坏的链接/丢失的图像时,您会看到什么?路径不正确还是空路径?
  • @Andrew 输出的路径是正确的,但是当我在新选项卡中打开它时,它说该页面不存在。
  • @BillJustin 好的,当我从浏览器中尝试时,发现图片的链接不包括/admin 部分,它是http://127.0.0.1:8000/storage/2021/04/12/12876b4a034032120b0a3cc3972f19cf2411aaaf.png。我在这里需要一些指导。需要在/admin下注册图片路由吗?

标签: php mysql laravel


【解决方案1】:

图片的公共路径在config\filesystems.php 文件中配置。

会有一个部分看起来像这样:

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

您可能需要更正保存到数据库中的图像路径,以匹配此处配置的内容,注意“url”值与您提到的照片工作位置相匹配。

【讨论】:

    【解决方案2】:

    假设$image_url="2021/04/21/12876b4a034032120b0a3cc3972f19cf2411aaaf.png" 并且您的文件在/storage/public/2021/04/21/12876b4a034032120b0a3cc3972f19cf2411aaaf.png

    由于图像在存储路径中,您可以创建响应图像的路由。

    Route::get('/image/{path}', function ($path) {
       return \Illuminate\Support\Facades\Storage::disk('public')->response($path);
    })->where('path', '.*')->name('show.image');
    

    并将您的 return "&lt;img src='{$image_url}' 替换为 return "&lt;img src='{route('show.image',['path'=&gt;$image_url])}'

    【讨论】:

    • 图像仍然不显示,并且由于某种原因,当我检查代码时,图像源还包括route....
    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-10-27
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多