request->file('file'); if (!$file) { return json(['code' => 400, 'message' => 'No file uploaded']); } // 参数校验 validate(UploadValidate::class)->scene('uploadImage')->check(['image' => $file]); $maxSize = 15 * 1024 * 1024; //限制15M if ($file->getSize() > $maxSize) { return json(['code' => 400, 'message' => 'Upload file is too large']); } $fileName = bin2hex(random_bytes(16)) . '.' . $file->getOriginalExtension(); // 初始化s3客户端 $s3Config = Config::get('common.aws_s3'); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => $s3Config['aws_region'], 'credentials' => [ 'key' => $s3Config['aws_key'], 'secret' => $s3Config['aws_secret'], ], ]); // 上传文件到S3 $result = $s3Client->putObject([ 'Bucket' => $s3Config['aws_bucket'], 'Key' => 'bourse-avatar/' . $fileName, // s3中的存储路径 'Body' => fopen($file->getRealPath(), 'r'), 'ContentType' => $file->getOriginalMime(), // 设置文件的MIME, 不然s3会以流式存储 ]); if (empty($result) || empty($result['ObjectURL'])) { return json(['code' => 400, 'message' => lang('upload_failed')]); } // 记录上传的文件 $resData = AwsS3Model::create([ 'name' => $fileName, 's3_url' => $result['ObjectURL'], 'size' => $file->getSize(), 'mime' => $file->getOriginalMime(), 'ext' => $file->getOriginalExtension(), ]); return json(['code' => '0', 'message' => lang('upload_successfully'), 'data' => [ 'id' => $resData->id, 'url' => $result['ObjectURL'], 'name' => $fileName, 'size' => $file->getSize(), 'mime' => $file->getOriginalMime(), 'ext'=> $file->getOriginalExtension(), ]]); }catch (ValidateException $validateException){ return json(['code' => '1004001', 'message' => $validateException->getError()]); }catch (\Exception $exception){ return json(['code' => '100500', 'message' => 'System error', 'data' => [$exception->getMessage(), $exception->getTrace(), $exception->getFile()]]); } } public function uploadRechargeImage(): Json { try { // 获取文件 $file = $this->request->file('file'); // 参数校验 validate(UploadValidate::class)->scene('uploadImage')->check(['image' => $file]); // 将文件存储在本地 $name = Filesystem::disk('local')->putFile('', $file); $path = '/bs/image/'.$name; // 入库 $id = FileModel::insertFile($path, 2); return json(['code' => '0', 'message' => 'Request successful.','data' => ['id' => $id]]); }catch (\Exception $exception){ return json(['code' => '100500', 'message' => 'System error','data' => [$exception->getMessage()]]); } } public function getConfig(): Json { try { $param = $this->request->param(); if (empty($param['name'])) return json(['code' => '1', 'message' => lang('parameter_error'), 'data' => []]); $name = $param['name']; $value = ConfigModel::where('name', $name)->value('value'); return json(['code' => '0', 'message' => 'Request successful.', 'data' => ['value' => $value]]); } catch (\Exception $exception) { return json(['code' => '100500', 'message' => 'System error', 'data' => [$exception->getMessage()]]); } } }