如何在laravel 5中使用Storage门面获取文件URL?

12 浏览
0 Comments

如何在laravel 5中使用Storage门面获取文件URL?

我一直在使用Laravel 5的新Flysystem集成进行实验。我将“本地化”的路径存储到数据库中,并使用Storage外观来完成路径。例如,我存储了`screenshots/1.jpg`并使用:

Storage::disk('local')->get('screenshots/1.jpg')

或者

Storage::disk('s3')->get('screenshots/1.jpg')

我可以在不同的磁盘上检索相同的文件。`get`方法检索文件内容,但我希望在视图中像这样使用它:


但是,`path`或者任何能够检索完整路径的方法都不可用(就我所知)。那么我该如何返回完整路径呢?或者,我想知道这是设计上的问题吗?如果是这样,为什么我不能获取完整路径?或者,我是不是完全走错了路?

0
0 Comments

在Laravel 5.2及以上版本中,有一个更好和更直接的解决方法,即使用Storage门面获取给定文件的完整路径/URL。需要在config/filesystems.php中将存储文件系统设置为S3:'default' => 's3'。可以使用Storage::url($filename)Storage::disk('s3')->url($filename)来实现。在config/filesystems.php中还定义了一个'cloud' => 's3'参数,用于指定云存储文件系统。如果想在本地服务器上维护存储文件夹但在云端检索/存储某些文件,可以使用Storage::cloud()方法,该方法也具有相同的文件系统方法,例如Storage::cloud()->url($filename)

这个解决方法是在Laravel 5.2版本中引入的,但是很高兴现在它已经存在了!Storage类默认在视图中工作,所以你不需要担心这个问题。

这篇文章主要介绍了在Laravel 5.2及以上版本中如何使用Storage门面获取文件URL的解决方法。

0
0 Comments

问题原因:在Laravel 5中,想要获取文件的URL需要使用Storage门面(Facade),但是在5.4之前的版本中,没有提供直接获取文件URL的方法。

解决方法:在Laravel 5.4及以上的版本中,可以使用Storage门面的path方法来获取文件的路径,然后通过将路径传递给url方法来获取文件的URL。具体代码如下:

$path = Storage::disk('public')->path($filename);
$url = Storage::disk('public')->url($path);

通过以上代码,我们可以先获取文件的路径,然后将路径传递给url方法来获取文件的URL。这样就可以方便地获取文件的URL了。

0
0 Comments

问题出现的原因是用户想要使用Storage门面获取文件的URL,但是他不清楚如何实现。

解决方法有两种:

1. 使用

$storagePath  = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix()

来获取存储磁盘的路径,然后将$storagePath传递给视图,再通过

$storagePath."/myImg.jpg";

来获取文件的URL。

2. 使用applyPathPrefix方法,如Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix('myImg.jpg');来获取文件的URL。

还有一个值得注意的地方是,复制第二种方法时,最后一个方法名(applyPathPrefix)之后会有一个奇怪的字符,如果粘贴该字符,就会出现错误。第一个applyPathPrefix方法可以正常复制。这是非常奇怪的。(可以通过双击示例中的最后一个方法名来进行测试)

另外,从Laravel 5.4开始,还有一个新的简单方法Storage::path可以使用,可以参考Bilal's answer

0