ขั้นตอนที่ 0 — การอัปโหลด

2.3 ขั้นตอนที่ 0 — การอัปโหลดและการประมวลผลเบื้องต้น

ฝั่งไคลเอนต์

ไคลเอนต์ส่งภาพที่ถ่ายหรือ PDF ตรงไปยังปลายทางอัปโหลดของแอปพลิเคชันเป็น multipart POST การประมวลผลเบื้องต้นเป็นความรับผิดชอบของเซิร์ฟเวอร์ การรักษาไคลเอนต์ให้เบาหมายความว่าทุกพื้นผิวการถ่ายภาพได้ประโยชน์จากการปรับมาตรฐานชุดเดียวกัน โดยไม่ต้องส่งโค้ดประมวลผลภาพไปยังแต่ละแพลตฟอร์ม

ฝั่งเซิร์ฟเวอร์

เส้นทางอัปโหลดตรวจสอบคำขอก่อนงานจัดเก็บใด ๆ:

  • ขีดจำกัดขนาด — ขนาดการอัปโหลดถูกตรวจสอบตามขีดจำกัดที่กำหนดในระบบผลิต
  • การตรวจ magic byte — เซิร์ฟเวอร์ตรวจสอบไบต์นำหน้าของบัฟเฟอร์เพื่อยืนยันว่าข้อมูลที่ส่งมาเป็นภาพแรสเตอร์จริง (JPEG, PNG, WEBP, HEIC และรูปแบบอื่นที่รองรับ) หรือ PDF โดยไม่ขึ้นกับ Content-Type ที่ไคลเอนต์ระบุ สิ่งนี้ปิดกั้นสคริปต์หรือมาร์กอัปที่ลักลอบส่งเข้ามาภายใต้ประเภท image/*

การอัปโหลดที่ผ่านการยอมรับจะเข้าสู่การประมวลผลเบื้องต้นฝั่งเซิร์ฟเวอร์ด้วย sharp:

  • ทิศทางภาพ — หมุนอัตโนมัติตามข้อมูล EXIF เพื่อให้ใบเสร็จตั้งตรงก่อนขั้นตอนการอ่าน
  • การบีบอัด — ภาพถูกเข้ารหัสใหม่ตามโปรไฟล์ขนาดและคุณภาพที่ปรับจูนไว้สำหรับขั้นตอน vision
  • การจัดเก็บ — ภาพที่ประมวลผลแล้วถูกเขียนลง Vercel Blob object storage โดยมีเส้นทางสำรองเป็นฐานข้อมูลเมื่อ Blob storage ใช้งานไม่ได้ ภาพที่จัดเก็บถูกกำหนดให้ลบตามนโยบายการเก็บรักษาข้อมูล

การตอบสนองส่งคืน receipt_id และการอ้างอิงภาพที่จัดเก็บไว้ จากนั้นไคลเอนต์เรียก POST /api/receipt/analyze เพื่อเข้าสู่ขั้นตอนที่ 1

การตรวจสอบซ้ำ

การตรวจสอบแฮชไฟล์แบบตรงตัวทำงานก่อนเริ่มงานที่มีต้นทุนสูงใด ๆ: ค่า SHA-256 ของไบต์ที่อัปโหลดถูกเปรียบเทียบกับใบเสร็จที่จัดเก็บไว้ก่อนหน้า การตรวจสอบความคล้ายเชิงการรับรู้ถูกเลื่อนออกไปโดยตั้งใจจนหลังการแยกเนื้อหา ซึ่ง ณ จุดนั้นสามารถตรวจไขว้กับแฮชเนื้อหาได้ การเปรียบเทียบเชิงภาพตั้งแต่ต้นจะสิ้นเปลืองงานนั้นไปกับการอัปโหลดที่การตรวจแบบตรงตัวจัดการได้อยู่แล้ว

ทั้งสองกรณีของการซ้ำจะปฏิเสธการอัปโหลดด้วยข้อผิดพลาดว่าเป็นรายการซ้ำ:

  1. ซ้ำโดยผู้ใช้รายเดียวกัน — ผู้ใช้ได้รับแจ้งว่าได้อัปโหลดใบเสร็จนี้ไปแล้ว สิ่งนี้ป้องกันการอัปโหลดซ้ำโดยไม่ได้ตั้งใจและความพยายามรับรางวัลซ้ำ
  2. การชนกันข้ามผู้ใช้ — ผู้ใช้ได้รับแจ้งว่าใบเสร็จนี้ถูกอัปโหลดโดยบัญชีอื่น นี่เป็นส่วนหนึ่งของการป้องกันการฟาร์ม

สัญญาณความคล้ายคลึงที่แน่นอนถูกปรับแต่งในระบบผลิตและจัดการในชั้นปฏิบัติการภายใน