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

les*_*gar 3 php laravel laravel-5

在我的Laravel 5.1应用程序中,我将图像存储storage/app/uploads文件夹中.

我的local磁盘:

<?php

'disks' => [

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

?>
Run Code Online (Sandbox Code Playgroud)

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

对于部署,我使用Envoyer提供解决方案.根据Envoyer文档:

存储用户上载的文件时,如果使用的是Laravel ,则应将它们存储在应用程序的存储目录中.然后,您可以使用Envoyer的"管理链接文件夹"功能来创建从公共目录到存储目录的符号链接.可以在项目的"部署挂钩"选项卡上找到"管理链接文件夹"按钮.

..这很清楚.

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

jed*_*ylo 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]);
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建符号链接public/assets => storage/app /

  3. 将文件上传到公共/资产而不是存储/应用

  4. 使用Web服务器上的重写来提供存储/应用程序文件夹中的文件 - 如何执行此操作取决于您使用的是哪个Web服务器.对于nginx,您可以使用类似的东西

    rewrite ^/v1/assets/(\d+) /../storage/app/$1;
    
    Run Code Online (Sandbox Code Playgroud)