qrCodeService = $qrCodeService; } public function generate(Request $request) { $validator = Validator::make($request->all(), [ 'text' => 'required|string|max:2048', 'size' => 'required|integer|min:100|max:800', 'errorCorrection' => 'required|in:L,M,Q,H', 'logo' => 'nullable|string' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } $cacheKey = md5($request->text . $request->size . $request->errorCorrection . $request->logo); try { $qrCode = Cache::remember($cacheKey, 3600, function () use ($request) { return $this->qrCodeService->generate( $request->text, $request->size, $request->errorCorrection, $request->logo ); }); return response($qrCode) ->header('Content-Type', 'image/png') ->header('Cache-Control', 'public, max-age=3600'); } catch (\Exception $e) { return response()->json(['error' => '二维码生成失败'], 500); } } public function uploadLogo(Request $request) { $validator = Validator::make($request->all(), [ 'file' => 'required|image|mimes:jpeg,png,jpg|max:2048' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } try { $path = $request->file('file')->store('logos', 'public'); return response()->json([ 'url' => asset('storage/' . $path) ]); } catch (\Exception $e) { return response()->json(['error' => 'Logo上传失败'], 500); } } }