Laravel存储符号链接

11

我正在尝试访问存储在 storage/app/.../.../file.png 的文件。

我已经创建了一个符号链接,将我的 storage 文件夹链接到 public/storage。

当我尝试访问相应的文件时,我的服务器会抛出404错误,显示文件未找到。显然我没有使用正确的方式访问它,但我不知道该怎么改变。

<img src="{{asset('storage/app/puppy/18/ax2Fk08nyWrV6TwTOnsXNCkNGuIdFebB7TTfPYGb.png')}}" alt="">

输入图像描述


4
你执行了 php artisan storage:link 命令吗? - user3574492
3个回答

34
当您在 laravel 中创建符号链接时,它会创建 storage/app/public 文件夹的符号链接到 public/storage 文件夹。这意味着如果您想公开访问任何文件,则将所有文件放在 storage/app/public 文件夹中,并像此示例一样访问它。
<img src="{{asset('storage/puppy/18/test.png')}}" alt="">

这里的意思是文件test.png应该实际上位于storage/app/public/puppy/18文件夹中。

在Laravel中执行php artisan storage:link以创建符号链接。

希望它能够清楚地传达给您。


1
你太棒了。你似乎是回答我所有问题最清晰的人。 - Vranvs
啊,很高兴能帮助你。愉快的编程! - rkj
我有一个 Laravel 6 应用程序,一切似乎都就位了。但是 CSS 和 JS 没有加载。当我按下 Ctrl + U 时,我得到了这个 https://i.postimg.cc/Fs58WDJQ/Untitled.jpg ,当我检查并转到网络选项卡时,我看到 404 状态。我不知道为什么。这是我正在尝试使用的 Github 存储库 https://github.com/cmate5614530/inventory-management - Umair

3

对于共享主机,请尝试以下解决方案:

代码:

1)删除public_html/public/storage中的storage文件夹。

2)在public_html文件夹中创建一个名为symlink.php的php文件。

3)向symlink.php文件添加代码。

$targetFolder = $_SERVER['DOCUMENT_ROOT'].'/storage/app/public';
$linkFolder = $_SERVER['DOCUMENT_ROOT'].'/public/storage';
symlink($targetFolder,$linkFolder);
echo 'Symlink process successfully completed';

4) 转到网站 example.com/symlink.php

就是这样...

来自 YouTube 的视频网址 => https://www.youtube.com/watch?v=svyN8-PjGHc


我无法访问该文件,它显示404 LOL。 - Mohammad
可能出现了一些问题,或者您的托管提供商不支持符号链接。 - Nijat Aliyev
我的主机没有问题,因为我们将域名的根目录设置为domain.com/public,所以您无法访问根目录中的文件是正常的。我的主机支持符号链接,我通过SSH解决了这个问题。 - Mohammad
这个想法对我起作用了!它确实抱怨无法创建符号链接,因为 $_SERVER['DOCUMENT_ROOT'] 返回的路径包括公共文件夹。最终我打印出路径并手动输入和修改变量到 symlink 函数中,成功运行了! - Tum
@Tum 你想分享一下你做了什么吗? - Umair
@Umair 我最初做了类似于 echo getcwd(); 的操作来知道上传文件的路径。然后我手动输入了符号链接函数中的路径,类似于 symlink('/path/of/existing/folder', '/path/of/preferred/folder);。这是一段时间以前的事情,所以我不确定我输入的确切内容。 - Tum

1
尝试这个。
<img src="{{asset('puppy/18/ax2Fk08nyWrV6TwTOnsXNCkNGuIdFebB7TTfPYGb.png')}}" alt="">

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