Laravel 获取上载文件的正确URL

Laravel 获取上载文件的正确URL,laravel,laravel-8,laravel-storage,Laravel,Laravel 8,Laravel Storage,我的平台中有一个功能,允许用户上传自己的图标图像。一旦他们上传了它们,我就使用$request->icon->store('public/icons')保存它们,并简单地保存返回的路径,比如“public/icons/xa6y2am3e4codqqqlpvehfsxkdkwfmdoggs2i67l.png” 我不太清楚什么是显示图标的正确方式。上面示例中显示图标的URL是“/storage/icons/xa6y2am3e4codqqqlpvehfsxkdkwfmdoggs2i67l.png”,因

我的平台中有一个功能,允许用户上传自己的图标图像。一旦他们上传了它们,我就使用$request->icon->store('public/icons')保存它们,并简单地保存返回的路径,比如“public/icons/xa6y2am3e4codqqqlpvehfsxkdkwfmdoggs2i67l.png”

我不太清楚什么是显示图标的正确方式。上面示例中显示图标的URL是“/storage/icons/xa6y2am3e4codqqqlpvehfsxkdkwfmdoggs2i67l.png”,因此我需要将路径中的“public”替换为“storage”,这让我觉得我在某个地方做错了什么(我看不出store()方法为什么应该为我提供不正确的路径)


我已经完成了文档中描述的符号链接。使用本地存储。我缺少什么?

这是我在一个包含博客的应用程序中处理存储的方式:

$storedImageName = $request->file('main_image')->store('blog_images', 'public');
store方法实际上返回存储的文件名和路径。在这里,我指定我的磁盘是
public
,而
public
中的文件夹是
blog\u images
。我将结果存储在
$storedImageName

现在,为了将其保存到数据库中,我实际上并不保存整个路径,我只保存图像名称。这是因为,您可能希望在将来更新目录名,或将其移动到其他位置,等等。您可以这样获得:

$onlyImageName = basename($storedImageName);
<img ... src="{{ asset('/storage/blog_images/' . $blog->main_image) }}" />
是PHP的函数,与Laravel无关

这样,我可以在刀片文件中渲染图像,如下所示:

$onlyImageName = basename($storedImageName);
<img ... src="{{ asset('/storage/blog_images/' . $blog->main_image) }}" />
main_image)}}/>

asset()
helper将为您提供公共目录的路径,然后您只需要指定映像路径的其余部分。

看起来我也会这样做(只保存store()方法返回的basename部分)。只是看不到store()的意义返回一条实际上不可用的路径。Laravel中的东西通常是一种开箱即用的魔法,因此当你需要绕圈子时,这通常是一种根本错误的迹象:-)如果你需要,返回整个路径并提取名称更容易,而不是只返回名称并手动计算出路径h、 这对我来说很有意义。如果答案对你有帮助,请投票并接受它,这样其他人也可以知道。谢谢!