File Upload
Penjelasan
c.FormFile("nama_field") mengambil file yang diupload lewat form multipart/form-data. Gin punya method praktis c.SaveUploadedFile(file, path) yang LANGSUNG menyimpan file itu ke disk — mirip c.SaveFile() Fiber, cuma beda nama method.
Contoh Konsep
r.POST("/produk/upload", func(c *gin.Context) {
file, err := c.FormFile("gambar")
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if err := c.SaveUploadedFile(file, "./uploads/"+file.Filename); err != nil {
c.JSON(500, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"namaFile": file.Filename})
})
Praktikum
Buat route POST /artikel/upload yang menerima satu file dengan field name "foto" lewat c.FormFile(), simpan ke folder "uploads/artikel/" lewat c.SaveUploadedFile(), merespons JSON berisi nama file yang tersimpan.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Penamaan c.SaveUploadedFile() (Gin) vs c.SaveFile() (Fiber) untuk fungsi yang KONSEPNYA identik adalah contoh lagi kenapa dokumentasi resmi tiap framework tetap perlu dicek — walau ketiga framework Go ini (Gin/Echo/Fiber) mirip konsep, penamaan method detailnya tidak selalu sama persis.