Laravel 5.4 存储链接

13
我想在HTML文件中展示一张图片,我进入链接文件夹public/storage/image发现它是空的,但是在storage/image文件夹中我找到了这个文件,同时也被保存在数据库中。
@foreach($cvs as $cv)
                    <div class="col-sm-6 col-md-4">
                    <div class="thumbnail">
                        <img src="{{ asset('storage/'.$cv->photo) }}" alt="...">
                        <div class="caption">
                        <h3>{{ $cv->titre }}</h3>
                        <p>{{$cv->presentation}}</p>
                        <p>
                            <a href="#" class="btn btn-primary" role="button">Afficher</a>
                            <a href="#" class="btn btn-success" role="button">Modifier</a>
                            <a href="#" class="btn btn-danger" role="button">Supprimer</a>
                         </p>
                        </div>
                    </div>
                    </div>
                    @endforeach
                    </div>
               </div>

这是实际的目录 public/storage/image 吗? - Basheer Kharoti
2
我使用以下命令创建的:"php artisan storage:link"。 - mouhamed slaimi
7个回答

31

首先在 .env 文件 中创建一个名为 FILESYSTEM_DRIVER 的变量,并将其设置为 public,如下所示

FILESYSTEM_DRIVER=public

然后通过运行命令创建符号链接

php artisan storage:link

之后只需使用asset()函数

<img src="{{ asset('storage/'.$cv->photo) }}" alt="...">

它将正常工作


嘿,我被卡了好几个小时。网络上充满了有关创建存储链接的建议,但我没有在任何地方阅读到有关FILESYSTEM_DRIVER的内容。这为我解决了问题。谢谢。 - NXA
1
使用 Laravel 8 不一定需要 FILESYSTEM_DRIVER 变量。 - Freddy Daniel

9

前往公共目录并运行:

rm storage

接着进入项目根目录并运行:

php artisan storage:link

6

public 磁盘用于存储将公开访问的文件。默认情况下,public 磁盘使用本地驱动程序,并将这些文件存储在 storage/app/public 中。为了使它们可以从 Web 访问,您应该创建一个符号链接从 public/storagestorage/app/publicLaravel 文档

Linux 中创建符号链接

ln -s source_file myfile

9
也就是php artisan storage:link - Hussein
当然,我使用了php artisan storage:link命令,并在public/storage/image中创建了文件夹。但是当我想要显示文件时,它并不起作用,因为public/storage/image是空的。 - mouhamed slaimi
推荐使用的命令是:php artisan storage:link - Aamir Kalimi

4

我只需对文件系统的配置/文件系统进行了简单的修改就解决了这个问题。

'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ]

致:

'local' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
        ]

2

如果你无法通过运行来在LAMP上创建符号链接

php artisan storage:link 

然后运行

 ln -s public_html/storage/app/public public_html/public/storage

如果您不在public_html或根目录中,则运行以下命令:

  ln -s /application/xyhpnqyw/public_html/storage/app/public /application/xyhpnqyw/public_html/public/storage
    target='/application/xyhpnqyw/public_html/storage/app/public'
    shortcut='/application/xyhpnqyw/public_html/public/storage'

然后运行以下命令:


1
正如Mayank Majithya所指出的那样,符号链接是从public/目录访问storage/app/public/文件的一种常见方式,实际上Laravel文档中建议使用该方法。
如果您正在使用禁止此操作的共享主机,您也可以尝试使用Laravel的storage_path()辅助函数,如下所示:<img src="{{ storage_path('subpaths/under/storage/filename.jpg') }}"> (参考资料)。
我还注意到您提到图像存储在数据库中。如果您的意思是整个文件都被存储了,那么在数据库中仅存储文件路径可能更高效(因为它已经存储在磁盘上)。然后,您可以使用模型获取路径(假设您的表有'src'和'alt'列):
<img src="{{ $mymodel->src }}" alt="{{ $mymodel->alt }}">

1
这对我有用。我在路由文件的开头添加了命令“Artisan::call('storage:link', [] );”,并从public中删除了存储文件夹。重要的是首先删除该文件夹,否则它将无法工作。如果它正在运行,则从路由中删除代码,因为它应该仅在服务器上运行一次。

这对我有用!谢谢! - Hassan Mehdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接