我读过 public 文件夹中的文件可以通过 Laravel 中的网络浏览器访问。当我在我的公用文件夹中输入文件的路径时,我看不到该文件,除非我在路由中定义了路径。
我正在制作一个下载页面,以便用户可以通过 from 下载加密/分类的 Material 。
我不希望用户能够以下载表单或其他受控方法以外的任何其他方式访问文件。
我是否需要创建一个私有(private)文件夹并存储他们的文件。如果我这样做了,我还能访问后端的文件吗?
或者除非路由定义,否则无法访问公用文件夹中的文件?如果是这样,我可以将文件存储在 public 下吗?
最佳答案
任何人都可以访问公共(public)文件夹下的文件,除非您的网络服务器将策略设置为特定目录。
如果您目前无法访问公用文件夹中的文件,是因为,可能,您没有正确写入 url,即:
一个文件在
/var/www/myapp/public/img/logo.png
可通过以下方式访问:
http://myapp.com/img/logo.png
请注意,您的 URL 中不存在您文件夹的公共(public)部分仅当您的网络服务器配置正确并且您的 .htaccess
文件就位并且能够重写你的网址。
对于敏感文件,您可以将它们存储在您的应用程序文件夹(或任何其他公共(public)文件夹之外)中,只有您的应用程序可以访问,这样就可以了:
/var/www/myapp/app/storage/<create a new folder here>
然后,是的,创建一条路径来读取和展示您的安全文件:
Route::get('readfile/{fileName}', ['before' => 'auth', 'use' => 'ReadFileController@read']);
过滤器 'before' => 'auth'
将确保未经身份验证的人永远无法访问文件。
在您的 Controller 中,您可以执行以下操作来检查是否可以看到文件:
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)
{
...
}
}
关于security - laravel-4 中分类文件的受控访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047747/