หน้าแรกผลงานความสำเร็จปรึกษาโปรเจกต์ของคุณ
ปรึกษาโปรเจกต์ของคุณ
Upload file ขึ้น S3 โดยตรงด้วย Presigned URL [Golang]
เทคโนโลยี

Upload file ขึ้น S3 โดยตรงด้วย Presigned URL [Golang]

15 ต.ค. 2569

Article illustration 1
Credit: Mediamodifier

ปัจจุบันถ้าพูดถึงเรื่องการจัดการ Storage ส่วนใหญ่ก็คงหนีไม่พ้นบริการเจ้าดังอย่าง Amazon S3 ที่มี API สำหรับใช้จัดการไฟล์หลากหลายภาษา ดังในบทความนี้ก็จะใช้ Golang เป็นหลัก

วิธีในการ Upload File ขึ้น server นั้น ในความเป็นจริงสามารถทำได้หลากหลายแบบ ขึ้นอยู่กับความต้องการของงาน จึงขอเปรียบเทียบตัวอย่างระหว่างการทำ Simple Upload กับ Presigned Upload เพื่อให้เห็นภาพได้ง่าย

Simple Upload

Article illustration 2
Simple Upload Example

การ Upload แบบ 2 ชิ่ง ก็คือส่งไฟล์จาก Client >> Service >> S3ข้อดีของการทำแบบดังกล่าวคือ Implement ง่าย แต่ไม่เหมาะกับระบบที่มี Load สูง ๆ เนื่องจากต้องมีการพัก Buffer ที่ Service นั่นเอง

Presigned Upload URL

Article illustration 3
Article content divider

การขอ URL เพื่อ Upload ไปที่ S3 โดยตรง ถ้าเทียบกับข้อข้างบนก็คือจากClient >> S3ข้อดีคือทำให้ภาระการ Upload File ไปตกอยู่กับ AWS S3 โดยตรง ทำให้ Service มี Capacity สูง แต่แลกมาซึ่งความซับซ้อนในการ Implement

Step ในการทำ Presigned Upload URL มีดังนี้

  1. Service ขอ Presigned Upload URL จาก S3 API โดยขั้นตอนนี้สามารถกำหนด specs ข้อจำกัดต่าง ๆ ของไฟล์ได้ด้วย

  2. Service ส่ง Presigned Upload URL ให้ Client และเมื่อ User เริ่ม Upload File ก็จะใช้ request PUT method ไปยัง Presigned Upload URL ที่ได้มา

  3. หลังจากนั้นก็จะเป็นขั้นตอนของการ Update File Address ในฐานข้อมูลฝั่ง Service แล้ว ถึงตรงนี้แล้วแต่เราจะออกแบบเลยเพราะเราได้ Address มาตั้งแต่ Step ที่ 1 เรียบร้อยแล้ว

ตัวอย่าง

เราจะใช้ Fiber Framework + AWS SDK v2 ในการสาธิต โดยผู้เขียนจะมโนว่าผู้อ่านพอมีประสบการณ์ในการใช้ API Framework ที่ชื่อ Fiber มาบ้าง (ถ้ายังสามารถตามไปอ่าน URL ที่แปะไว้ก่อนได้)

  • sdk package — github.com/aws/aws-sdk-go-v2 — pkg.go.dev

  • gofiber/fiber: ⚡️ Express inspired web framework written in Go (github.com)

ผู้อ่านสามารถลองเอา Source Code ไปวางใน Folder ตาม package (บรรทัดที่ 1 ของแต่ละไฟล์) ได้เลย

https://medium.com/media/348dcbfc4b3922e34698a8e49639f7a6/href

หลังจากนั้นให้ใช้ Controller ไปต่อกับ Router แล้วลอง Request ไปที่ GetPresignedURL ก็จะได้ URL สำหรับ Upload ประมาณนี้

https://presignedurldemo.s3.eu-west-2.amazonaws.com/just-example-file.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJJWZ7B6WCRGMKFGQ%2F20180210%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20180210T171315Z&X-Amz-Expires=1800&X-Amz-Signature=12b74b0788aa036bc7c3d03b3f20c61f1f91cc9ad8873e3314255dc479a25351&X-Amz-SignedHeaders=host

หลังจากนั้นใช้ Presigned URL ที่ได้มาไปใช้ทำ Request เพื่อส่ง Data Form แนบไฟล์รูปไป

ตัวอย่าง cURL

curl --location --request PUT 'https://presignedurldemo.s3.eu-west-2.amazonaws.com/just-example-file.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJJWZ7B6WCRGMKFGQ%2F20180210%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20180210T171315Z&X-Amz-Expires=1800&X-Amz-Signature=12b74b0788aa036bc7c3d03b3f20c61f1f91cc9ad8873e3314255dc479a25351&X-Amz-SignedHeaders=host' \

--form 'file=@"/path/to/image.png"'

เสร็จแล้วเช็คใน S3 Bucket ก็จะพบไฟล์เราไปโผล่ตรงนั้นเรียบร้อย เป็นอันว่าสำเร็จ ซึ่งการ Upload ตรงนี้ก็จะมีเวลา Expired และ Option อื่น ๆ อีกมากมายที่สามารถศึกษาได้เพิ่มจาก AWS SDK Official Document

Article content divider

Upload file ขึ้น S3 โดยตรงด้วย Presigned URL [Golang] was originally published in I GEAR GEEK on Medium, where people are continuing the conversation by highlighting and responding to this story.

บทความที่เกี่ยวข้อง

เทคโนโลยี

TypeScript คืออะไร? แล้วคุณรู้หรือไม่ว่าใช้งานยังไง

บทความแนะนำภาษา TypeScript ว่าคืออะไร ทำไมถึงควรเรียนรู้ และช่วยให้การเขียนโปรแกรมปลอดภัยและจัดการง่ายขึ้นอย่างไร

เทคโนโลยี

มาทำความรู้จักกับ Lodash กัน

ก่อนอื่นเลยต้องขอสวัสดีพี่ๆน้องเพื่อนๆ ชาวโปรแกรมเมอร์ กันก่อนนะครับ สำหรับ Blog นี้ผมจะพาทุกๆคนไปทำความรู้จักกับ Libary…

เทคโนโลยี

Multiple Language ด้วย i18n บน nuxt.js Framework

สวัสดีครับ พอดีผมได้มีโอกาศลองใช้งานเจ้าตัว i18n เห็นว่าเจ้าตัวเนี่ย มันใช้งานค่อนข้างง่ายพอสมควรครับ วันนี้เลยจะมาแชร์ถึงการ setting…

I GEAR GEEK

Technology Partner ขับเคลื่อน Digital Transformation ให้ธุรกิจคุณ

โซลูชัน

  • ERP และระบบธุรกิจ
  • AI Knowledge และ AI Agents
  • Customer Data & Marketing Automations

บริการ

  • Web Application, Mobile Application

บริษัท

  • บทความ
  • แกลเลอรี
  • ร่วมงานกับเรา

ติดต่อ

marketing@igeargeek.com

Malada space ชั้น 2, 89/9 หมู่ 5 ตำบลสุเทพ อำเภอเมืองเชียงใหม่ จังหวัดเชียงใหม่ 50200

LINE OA@igeargeekสอบถามโปรเจกต์083-579-5068สมัครงานและฝึกงาน083-254-2241
© 2026 I GEAR GEEK สงวนลิขสิทธิ์
ปรึกษาโปรเจกต์ของคุณ