file('file'); if (!$file || !$file->isValid()) return $this->fail([ResponseCode::ERROR_BUSINESS, '请选择有效文件']); //获取文件大小,单位B $fileSize = floor($file->getSize()); if ($fileSize >= 50 * 1024 *1024) { return $this->fail([ResponseCode::ERROR_BUSINESS, '文件必须小于50M']); } $originalName = $request->input('original_name'); if (!is_string($originalName) || trim($originalName) === '') $originalName = $file->getClientOriginalName(); //过滤文件后缀 $ext = strtolower($file->getClientOriginalExtension()); if ($request->filled('survey_question_id')) { $question = \App\Models\CourseContentEvaluationAsk::find($request->input('survey_question_id')); if (!$question || $question->edit_input !== 'file') return $this->fail([ResponseCode::ERROR_BUSINESS, '上传题目不存在']); $allowed = \App\Services\Survey\SurveySchema::fileExtensions($question->config ?? []); if (!in_array($ext, $allowed, true)) return $this->fail([ResponseCode::ERROR_BUSINESS, '只允许上传 '.implode('、', $allowed).' 格式']); } if (in_array($ext, ['zip','rar','ppt','pptx','xls','xlsx','doc','docx','png','gif','jpg','jpeg','pdf','mp4'])) { // 保存目录 $dir = 'files'; // 文件名 $fileName = time() . uniqid() . '.' . $ext; $file->storeAs($dir,$fileName,['disk'=>'public']); // 写入上传文件记录表 $list = [ 'original_name'=>mb_substr(basename(str_replace('\\', '/', $originalName)), 0, 255), 'folder'=>'storage/'.$dir, 'name'=>$fileName, 'extension'=>$ext, 'size'=>$fileSize, 'creator_id'=>$this->getUserId(), 'created_at'=>date('Y-m-d H:i:s') ]; $id = Upload::insertGetId($list); $uploadFile = Upload::find($id); return $this->success($uploadFile); } else { return $this->fail([ResponseCode::ERROR_BUSINESS, '文件格式错误']); } } }