在Laravel中,我将上传的文件夹保存在公用文件夹的目录中。我想找到一种方法从文件对象本身获取此文件的公共URL。
E.g。 $file
是Symfony\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()));
(它可以工作,并且应该继续在环境之间工作)但我希望有更优雅的东西。
答案 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)