Laravel中,如何显示存在storage目录中的图片文件。

我讲一些图片和用户上传文件保存在了storage目录中(处于安全考虑,不希望用户随意下载),

那么在需要显示该文件时,应该如何获取路径呢?

阅读 15.6k
2 个回答

两个方案,第一个,php读取文件并输出,在Laravel中代码大致如下

// 控制器
// https://github.com/shellus/shcms/blob/v2.0.0/app/Http/Controllers/FileController.php

class FileController extends Controller
{
    public function show($id){
        return File::findOrFail($id) -> downResponse();
    }
}

// Model
https://github.com/shellus/shcms/blob/v2.0.0/app/File.php

public function downResponse(){
    return new BinaryFileResponse($this -> downToLocal());
}
public function downToLocal(){
    $temp_path = tempnam(sys_get_temp_dir(), $this->id);
    $is_success = file_put_contents($temp_path, \Storage::disk('public')->get($this -> full_path));
    return $temp_path;
}
    

第二个,使用Linux ln命令建立storage文件夹软链接public文件夹,但是这样做与直接将文件存放在public没有区别。

其实还有一个方案:
使用nginx开启一个web服务,专门用于提供静态文件(图片)的访问

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进