diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index 212112ab..56bb3db5 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -54,11 +54,15 @@ public function getStamp(): JsonResponse public function uploadStamp(Request $request): JsonResponse { $request->validate([ - 'stamp_image' => 'required|image|max:5120', + 'stamp_image_data' => 'required|string', ]); $tenantId = session('selected_tenant_id', 1); - $file = $request->file('stamp_image'); + $imageData = base64_decode($request->input('stamp_image_data')); + + if (!$imageData) { + return response()->json(['success' => false, 'message' => '이미지 데이터가 올바르지 않습니다.'], 422); + } $path = "esign/{$tenantId}/stamps/company_stamp.png"; @@ -67,7 +71,7 @@ public function uploadStamp(Request $request): JsonResponse Storage::disk('local')->delete($path); } - Storage::disk('local')->put($path, file_get_contents($file->getRealPath())); + Storage::disk('local')->put($path, $imageData); TenantSetting::updateOrCreate( [ diff --git a/resources/views/esign/dashboard.blade.php b/resources/views/esign/dashboard.blade.php index 4bd3ec6a..b5c3a756 100644 --- a/resources/views/esign/dashboard.blade.php +++ b/resources/views/esign/dashboard.blade.php @@ -388,20 +388,26 @@ className={`px-3 py-1 text-sm rounded ${p === pagination.current_page ? 'bg-blue const handleUpload = async (e) => { const file = e.target.files[0]; if (!file) return; + if (file.size > 5 * 1024 * 1024) { alert('파일 크기는 5MB 이하여야 합니다.'); return; } setUploading(true); try { - const fd = new FormData(); - fd.append('stamp_image', file); + const base64 = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result.split(',')[1]); + reader.onerror = reject; + reader.readAsDataURL(file); + }); const res = await fetch('/esign/contracts/stamp', { method: 'POST', - headers: { 'Accept': 'application/json', 'X-CSRF-TOKEN': csrfToken }, - body: fd, + headers: { ...getHeaders(), 'Content-Type': 'application/json' }, + body: JSON.stringify({ stamp_image_data: base64 }), }); const json = await res.json(); if (json.success) { setStamp(json.data); } else { - alert(json.message || '업로드에 실패했습니다.'); + const errMsg = json.errors?.stamp_image_data?.[0] || json.message || '업로드에 실패했습니다.'; + alert(errMsg); } } catch (e) { alert('업로드 중 오류가 발생했습니다.'); } setUploading(false);