我有一个应用程序,用户可以在应用程序中注册,也可以上传自己的文件。
我的问题是,如何才能以这种方式为文件添加隐私权?如果没有身份验证就无法访问文件,每个用户只能访问自己的文件
答案 0 :(得分:1)
这里的答案有点取决于如何确保这一切的安全性。
上传文件时,您可以为文件生成一个随机的长文件名。很难猜到这些密码-就像一个相当强壮的密码-在大多数情况下都能解决。
如果您使用store()
方法,Laravel实际上就是这样做的:
$path = $request->file('avatar')->store('avatars');
如果您需要的不仅仅是安全性,可以将上传的文件存储在非公共位置。然后,添加一条路由(例如download/{id}
),让该路由检查用户对相关文件的权限,并在授权的情况下将该文件提供给浏览器:
return Storage::download('path/to/the.file');
Storage::download
通过Laravel代理文件,因此即使未存储在公用文件夹中的文件也可以使用。
答案 1 :(得分:0)
保留所有用户都无法访问的文件夹中的所有文件,以防止任何URL猜测。
您的代码将负责验证用户是否拥有该文件。清除用户后,您可以将文件移到公众可以访问的临时文件中:
Storage::copy('restricted_folder/file.jpg', 'public_folder/random_name.jpg');
然后返回响应,该响应将迫使用户下载文件,并在请求后删除临时文件:
return response()->download('public_folder/random_name.jpg','file.jpg')->deleteFileAfterSend();