首页  编辑  

ThinkPHP6 中不使用Public上传文件和访问文件,增加登录验证控制,不允许匿名访问

Tags: /PHP/   Date Created:
在ThinkPHP6.0中,如何实现文件上传,并且不存储到public目录,因为public目录下的文件,默认情况下,是不带登录验证控制的,如果有敏感文件,不允许匿名访问,就可以使用下面的方法

在Controller中写类似代码:
// 文件上传接口
public function upload() {
	if (!session('user')) {
		$this->ajaxReturn(["auth" => "NoAuth"]);
	}
	try {
		$file = request()->file('file');
		validate(['file' => ['fileSize' => 102400, 'fileExt' => 'gif,jpg,png,jpeg']])->check(['file' => $file]);   // 只允许上传特定文件

		$savename = \think\facade\Filesystem::putFile('image', $file);       //  获取到磁盘文件名
		$url = "/file?url=".$savename;
		$ret['result'] = "OK";
		$ret['url'] = $url;    // 返回的www对外访问URL地址
		$this->ajaxReturn($ret);
	} catch (\Exception $e) {
		$this->ajaxReturn(["result" => "error", "msg" => $e->getMessage()]);
	}
}

// 文件资源访问控制器接口
public function file($url) {
	if (!session('user')) {    // 此处进行登录验证
		$this->ajaxReturn(["auth" => "NoAuth"]);
	}
	$file = \think\facade\Filesystem::path($url);   // 根据url获取到对应磁盘完整文件名
	return download($file);    // 返回文件内容
}