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