Laravel从完整路径获取公用文件夹中的文件的URL

时间:2015-02-20 10:44:52

标签: php laravel-4

在Laravel中,我将上传的文件夹保存在公用文件夹的目录中。我想找到一种方法从文件对象本身获取此文件的公共URL。

E.g。 $fileSymfony\Component\HttpFoundation\File\File的一个实例。因此$file->getRealPath()可以返回类似C:\xampp\htdocs\myapp\public\uploads\2015\2\test.pdf的内容。

如何为此生成公共网址?我尝试使用asset($file->getRealPath());,但这会提供类似http://localhost/myapp/C:\xampp\htdocs\myapp\public\uploads\2015\2\06-12-2014-2.pdf的内容。即我需要删除公用文件夹之前的路径部分,然后再将其提供给asset()

我想做像

这样的事情
asset(str_replace(public_path(), '' , $file->getRealPath()));

(它可以工作,并且应该继续在环境之间工作)但我希望有更优雅的东西。

2 个答案:

答案 0 :(得分:0)

我一直在为你研究这个问题。问题是Symfony\Component\HttpFoundation\File\File实际上只是PHP SplFileInfo http://php.net/manual/en/splfileinfo.getlinktarget.php的包装器,带有一些额外的功能。

这些功能都不会给你你想要的东西。

您发布的解决方案是最佳选择 - 尽管如果您想稍微清理一下 - I would suggest putting it inside a custom HTML macro class and doing it this way

HTML::macro('show_relative_path', function()
{
    return str_replace(public_path(), '' , $path);
});

然后在你的视图中做

asset(HTML::show_relative_path($file->getRealPath()));

答案 1 :(得分:0)

Laravel提供帮助功能来生成网址。例如,如果$ file保存文件的路径,那么您只需使用url()函数生成此文件的公共URL。

url($file)

更多信息: https://laravel.com/docs/5.4/helpers#method-url