【问题标题】:Laravel get url for file in public folder from full pathLaravel 从完整路径获取公用文件夹中文件的 url
【发布时间】:2015-02-20 10:44:51
【问题描述】:

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

例如$fileSymfony\Component\HttpFoundation\File\File 的一个实例。所以可以做$file->getRealPath(),它返回类似C:\xampp\htdocs\myapp\public\uploads\2015\2\test.pdf的东西。

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

我想过做类似的事情

asset(str_replace(public_path(), '' , $file->getRealPath()));

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

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    Laravel 提供 helper 函数来生成 url。例如,如果 $file 包含您的文件的路径,那么您可以简单地使用url() 函数来生成该文件的公共 url。

    url($file)
    

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

    【讨论】:

      【解决方案2】:

      我一直在为你调查这件事。问题是 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()));
      

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 2015-06-15
        • 2011-04-13
        • 2019-02-09
        • 1970-01-01
        • 2022-12-21
        • 1970-01-01
        • 2020-08-09
        • 2011-07-27
        相关资源
        最近更新 更多