3

我读过 public 文件夹中的文件可以通过 Laravel 中的网络浏览器访问。当我在我的公用文件夹中输入文件的路径时,我看不到该文件,除非我在路由中定义了路径。

我正在制作一个下载页面,以便用户可以通过 from 下载加密/分类材料。

我不希望用户能够以下载表单或其他受控方法以外的任何其他方式访问文件。

我是否需要创建一个私人文件夹并存储他们的文件。如果我这样做了,我还能访问后端的文件吗?

或者除非路由定义,否则无法访问公用文件夹中的文件?如果那是对的,我可以将文件存储在 public 下吗?

4

2 回答 2

10

任何人都可以访问公共文件夹下的文件,除非您的网络服务器将策略设置为特定目录。

如果您当前无法访问公用文件夹中的文件,可能是因为您没有正确写入 url,即:

一个文件在

/var/www/myapp/public/img/logo.png 

可通过以下方式访问:

http://myapp.com/img/logo.png

请注意,当您的网络服务器配置正确且.htaccess文件已就位并且能够重写您的 URL 时,您的 URL 中才不会出现文件夹的公共部分。

对于敏感文件,您可以将它们存储在您的应用程序文件夹(或公共以外的任何其他文件夹)中,只有您的应用程序可以访问,这样可以:

/var/www/myapp/app/storage/<create a new folder here>

然后,是的,创建一条路径来读取和呈现您的安全文件:

Route::get('readfile/{fileName}', ['before' => 'auth', 'use' => 'ReadFileController@read']);

过滤器'before' => 'auth'将确保未经身份验证的人永远无法访问文件。

在您的控制器中,您可以执行以下操作来检查是否可以看到文件:

class ReadFileController extends Controller {

    public function read($fileName)
    {
        if(Auth::user()->id == 1) // of course this is not a good way, just an example
        {
            return $this->getFile($fileName);
        }
        else
        {
            return Response::make(null, 403); // forbidden
        }
    }

    private function getFile($fileName)
    {
        ...
    }

}
于 2014-02-26T16:55:38.920 回答
0

此外,您可以在路由中使用身份验证“ middelware ”来添加更好的访问控制。

Route::get('routeName', ['middleware' => 'auth', 'uses' =>'XController@action']);
于 2016-08-26T10:45:03.757 回答