在 laravel 中显示从数据库到刀片的图像

Posted

技术标签:

【中文标题】在 laravel 中显示从数据库到刀片的图像【英文标题】:display images from database to blade in laravel 【发布时间】:2020-08-19 20:05:03 【问题描述】:

我有一个数据库,其中图像存储在表格行中,如下所示:

name(string)        "name"
sometext(string)    "some description"
filesnames(string)  image1.jpeg|image2.jpeg 

image1 和 image2 存放在“public/storage/image”文件夹中

public function store(Request $request)

    $data = request()->validate([
        'name' => 'required',
        'sometext' => '',
        'testImages' => '',
        'testImages' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $images = array();
    
    if($files = $request->file('testImages'))
        foreach($files as $file)
            $name = $file->getClientOriginalName();
            $file->move('image', $name);
            $images[] = $name;
        
    

    auth()->user()->tests()->create([
        'name' => $data['name'],
        'sometext' => $data['sometext'],
        'filenames' => implode("|", $images),
    ]);


public function show ($id)

    $tests = Tests::findorfail($id);  //get row data from table with ID
    return view('test.show-report', compact('tests'));  //return data to blade

在刀片中,我可以通过 $tests->name$tests->description 成功获取数据。

我无法弄清楚如何显示“文件名”刀片中的图像。

【问题讨论】:

数据库单元格中的确切内容是什么?图像1.jpeg?你是怎么上传的? 我在描述中也更新了商店功能 【参考方案1】:

你可以这样做:

@foreach(explode('|',$tests->filenames) as $fileName)
    <img src="/storage/image/$fileName"/>
@endforeach

【讨论】:

没问题,把它标记为答案,这样对别人也有帮助【参考方案2】:

如果图像名称以正确的扩展名正确存储在数据库中,那么您在刀片视图中将需要以下内容:

  <img src="/storage/image/$tests->NAME_OF_COLUMN_IN_DB" />

只需将“NAME_OF_COLUMN_IN_DB”替换为您在数据库中存储图像名称的列名。

【讨论】:

NAME_OF_COLUMN_DB 有多个图像名称,例如 image.jpeg|image2.jpeg(用 | 分隔)你能帮我如何在刀片中显示两个图像。 如果您在一行中存储多个图像名称,则无法将它们存储为文本并将它们检索到您的视图中,您需要将一个图像名称存储在一个数据库行中或存储所有图像名称为 JSON,有不同的处理方式。【参考方案3】:

试试这样 &lt;img src="/storage/image/ $tests['filenames'] " height="30px" width="30px" /&gt; 希望它会有所帮助: 在这种情况下: 在控制器中使用 explode() 到 $tests->filenames 创建一个数组,然后像这样循环它

@foreach(json_decode($tests->filenames, true) as $images)
     <img src="/storage/image/ $images "   />
@endforeach

【讨论】:

【参考方案4】:

这样使用

<img src=" url('') /storage/image/$tests-> filenames">

【讨论】:

【参考方案5】:

在你的模型中写一个这样的函数。假设你在用户模型中。

    public function getImage()

    return isset($this->image) && $this->image ? asset('userPhoto/'.$this->image): asset("dist/img/user2-160x160.jpg");

现在像这样检索刀片文件中的图像-

<a href="asset('userPhoto/'.$user->image)"target="_blank">
<img src=" $user->getImage() "></a>

【讨论】:

【参考方案6】:

您可以按照以下步骤操作

<img src=" public_path('storage\image')  $tests->filenames " />

使用以下代码分隔图片的名称

$img = exploade('|', $tests->filenames);
dump($img);

【讨论】:

请检查您的代码。为什么路径名中有反斜杠? exploade 是做什么的? 获取网址。并 exploade 将字符串转换为数组。示例 "img1.jpg|img2.png" 我如何分隔这个字符串?

以上是关于在 laravel 中显示从数据库到刀片的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将 vue 数据显示到 Laravel 刀片?

如何从循环中获取值到刀片 - laravel

为啥在 laravel 刀片文件下用 phpstorm 编写的 Bootstrap 中不显示图像?

laravel 将数据从刀片文件传递到控制器

如何在使用安全资产功能时将图像从数据库传递到 laravel 中查看

无法将数据从刀片传递到 vue(Laravel 5.3)