前台iview,后台yii,上传文件偶尔会500,偶尔又不会,不明觉厉

前台用的iview的Upload,怀疑是$_FILES['file']偶尔没有数据,不知道原因,上传的文件都很小几M大小

// 获取文件基本信息
        $gpx = $_FILES['file'];
        if (!$gpx['error']) {   // 没有出错
            $filename = $gpx['name'];
            $tmp_name = $gpx['tmp_name'];
            $suffix = strrchr($filename, '.');
            $gpx_url = '/tracks/' . date("YmdHis") . $suffix;
            $filepath = Yii::getAlias('@webroot' . $gpx_url);   // $md5 = md5(file_get_contents($gpx["tmp_name"]));
            if (move_uploaded_file($tmp_name, $filepath)) {     // 保存文件
                $ret_message['success'] = true;
                $ret_message['msg'] = '上传成功';
                $ret_message['tid'] = '0280001';
            }
            else {
                $ret_message['success'] = false;
                $ret_message['msg'] = '上传失败';
            }
        }
        else {
            $ret_message['success'] = false;
            $ret_message['msg'] = '上传失败';
        }
        return Json::encode($ret_message);
阅读 2k
1 个回答

已解决,自问自答。axios POST会先发送预请求OPTIONS,然后才是POST。一次axios,发送两次请求,第一次OPTIONS请求,必然FILES未定义,故出错,这是Yii的bug。解决方案一,判断请求来源为OPTIONS,则exit。if xxx=OPTIONS exit,后面是正常的action。解决方案二,升级Yii到最新版本,有修复的版本。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题