如何显示存储在数据库 PHP 中的图像路径? (Laravel 兰花)

Posted

技术标签:

【中文标题】如何显示存储在数据库 PHP 中的图像路径? (Laravel 兰花)【英文标题】:How do I display image path stored in database PHP? (Laravel Orchid) 【发布时间】: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下注册图片路由吗? 【参考方案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....

以上是关于如何显示存储在数据库 PHP 中的图像路径? (Laravel 兰花)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用存储在数据库字段中的相对路径在 ms access 2013 报告中显示图像

考虑到我的图像的链接存储在 MySQL 数据库中,如何通过 php 显示存储在文件夹中的图像

如何在 Laravel 7 中使用 Livewire 显示存储路径中的图像

React - 无法显示路径存储在 json 文件中的 svg 图像

在View中显示文件路径中的图像

如何使用php将图像存储在mysql数据库中