【问题标题】:laravel videos not in the public folderlaravel 视频不在公共文件夹中
【发布时间】:2018-10-16 06:16:12
【问题描述】:

我有一个 laravel 应用程序 (5.4)

每个用户在 /public 下都有一个文件夹,管理员可以在其中上传(通过 FTP)一些视频供用户观看。每个用户都有不同的视频。

我现在的问题是,公共文件夹中的所有内容都可以访问。另外,如果用户没有登录。如何避免这种情况?

【问题讨论】:

  • 您需要将它们存储为私有文件,然后当用户点击一个链接时,您确保它已被记录并可以访问该链接

标签: laravel storage public protected


【解决方案1】:

假设我们有 2 个用户名:

  • 约翰
  • 莎拉

那么您将有 2 个文件夹:

  • storage/app/john
  • storage/app/sarah

现在要访问 john 的文件,您应该在您的 routes/web.php 中包含以下内容:

Route::get('/file/{username}/{name}','FilesController@getFile');

然后在FilesController添加这个函数:

public function getFile($username,$name){
   if(!Auth::user()){
       //user is not logged in
       return response(null,403)
    }
   $auth_user = Auth::user()->username;
   if($username === $auth_user){
    //continue with the request

      $exists = Storage::disk('local')->exists($username .'/'. $name);
     if(!$exists){
         // file not found
         return response(null,404);
     }
      $file = Storage::get($username .'/'. $name);
      return response($file);
   }else{
     // the user doesn't have access
   }
}

我没有对此进行测试,所以如果您有问题,请告诉我

More on laravel storage

【讨论】:

  • 感谢您的解决方案。每个登录的用户都可以访问他们的视频,而不能访问其他用户的视频。问题是,当我将 url 更改为 mp4 文件时,如果没有人登录,我也可以看到它。将其移至存储文件夹,我无法访问它,登录时也是如此。
  • 您只能通过此功能访问文件,无法直接链接到该文件,因为它不在storage/app/public文件夹中
  • 那么如何将文件传递给 html 中的 video 或 img 标签?
  • 通过这个return response()->file(storage_path('app',$username .'/'. $name));
猜你喜欢
  • 2020-01-27
  • 2018-04-14
  • 2016-03-31
  • 2020-12-04
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多