在Laravel中管理上传的文件 - 链接公共和存储目录

时间:2015-07-27 13:20:16

标签: php laravel laravel-5

在我的Laravel 5.1应用中,我将图像存储在存储/应用/上传文件夹中。

我的local磁盘:

<?php

'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => storage_path('app/uploads'),
    ],
    // other configuration...

?>

事情是,我无法找到一种方法来在图像文件上传后使用它们,例如作为<img>标记的来源。基本上,我需要检索图像的有效路径,因此可以在页面上使用它。

对于部署我使用提供解决方案的Envoyer。根据{{​​3}}:

  

如果您使用的是Laravel,则在存储用户上传的文件时,应将其存储在应用程序的存储目录中。然后,您可以使用&#34;管理链接文件夹&#34; Envoyer的功能,用于从公共目录到存储目录创建符号链接。 &#34;管理链接文件夹&#34;按钮可以在&#34; Deployment Hooks&#34;项目标签。

..这很清楚。

但我如何&#34;链接&#34;我本地开发环境中的存储公开文件夹? Laravel是否提供了一种方法,或者我是否需要手动在我的环境中创建符号链接?

1 个答案:

答案 0 :(得分:5)

有几个选择:

  1. 创建一个输出文件的控制器

    class AssetController {
      public function show($id) {
        $file = File::findOrFail($id);
        return Response::make(Storage::get($file->storage_key), 200, ['Content-Type' => $file->mime_type]);
      }
    }
    
  2. 创建符号链接 public / assets =&gt;存储/应用程序/

  3. 将文件上传到公开/资源,而非存储/应用

  4. 使用网络服务器上的重写来提供存储/应用文件夹中的文件 - 如何操作取决于您使用的是哪种网络服务器。对于 nginx ,您可以使用类似

    的内容
    rewrite ^/v1/assets/(\d+) /../storage/app/$1;