1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- namespace app\middleware;
- use think\exception\ValidateException;
- use OSS\Core\OssException;
- use OSS\OssClient;
- use think\facade\Log;
- class Validate
- {
- /**
- * 处理请求
- * @param \think\Request $request
- * @param \Closure $next
- * @return Response
- */
- public function handle($request, \Closure $next)
- {
- $controller = $request->controller();
- $action = $request->action();
- $appName = app()->http->getName();
- trace($appName.'\\controller\\'.$controller.'@'.$action, 'log');
- $validateClass = 'app\\' . $appName . '\\validate' . '\\' . ucfirst($controller);
- $param = $request->isPost() ? $request->post() : $request->get();
- trace('post:'.json_encode($request->post()), 'log');
- trace('get:'.json_encode($request->get()), 'log');
- if (class_exists($validateClass)) {
- $validateObj = validate($validateClass);
- if ($validateObj->hasScene($action)) {
- try {
- $validateObj->scene($action)->check($param);
- } catch (ValidateException $e) {
- // 验证失败 输出错误信息
- return json(['code' => 1, 'msg' => $e->getError()]);
- }
- }
- }
- // 如果有上传图片,先将地址传到控制器
- $files = $_FILES;
- $method = strtolower($request->method(true));
- $requestMethond = 'with' . ucfirst($method);
- $imgUrlOss = [];
- if (!empty($files)) {
- foreach ($files as $key => $f) {
- if (!empty($f['name'])) {
- if (is_array($f['name'])) {
- $p = [];
- foreach ($f['name'] as $i => $name) {
- $url = $controller . '/' . uniqid() . '.' . pathinfo($name, PATHINFO_EXTENSION);
- $imgUrlOss[] = ['tmp_name' => $f['tmp_name'][$i], 'name' => $url];
- $p[] = $url;
- }
- } else {
- $p = $controller . '/' . uniqid() . '.' . pathinfo($f['name'], PATHINFO_EXTENSION);
- $imgUrlOss[] = ['tmp_name' => $f['tmp_name'], 'name' => $p];
- }
- if (method_exists($request, $requestMethond)) {
- $request->$requestMethond(array_merge($request->$method(), [$key => $p]));
- }
- }
- }
- }
- // 恢复内容设置到变量中
- $response = $next($request);
- // 将上传到图片保存
- if (!empty($imgUrlOss)) {
- $accessKeyId = config('app.ali_oss_access_key_id');
- $accessKeySecret = config('app.ali_oss_access_key_secret');
- $endpoint = config('app.ali_oss_end_point');
- $bucket = config('app.ali_oss_bucket');
- $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
- try {
- foreach ($imgUrlOss as $key => $v) {
- $oss->uploadFile($bucket, $v['name'], $v['tmp_name']);
- }
- } catch (OssException $e) {
- Log::record('文件上传失败,error:' . $e->getErrorCode(), 'error');
- return json(['code' => 1, 'msg' => $e->getErrorMessage()]);
- }
- }
- return $response;
- }
- }
|