Detaylıca değinmiyorum. input elementlerinin name özelliğinde ne isim verdiğimizi dikkat etmemiz yeterli. form elementinin action özelliğine /yukle adresini verdik.
main.go dosyamız ise aşağıdaki gibi olacaktır. Detaylarına yorum satırlarında değindim.
package main
import (
"fmt"
"path/filepath"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
//Yükleme yapacağımız dosyanın maksimum boyutunu
//ayarlayalım.
router.MaxMultipartMemory = 8 << 20 // 8 MiB
//index.html dosyamızın bulunduğu klasörü static olarak
//ekliyoruz ki index.html dosyamızı kullanabilelim.
router.Static("/", "./website")
//yukleme işlemini yapacak olduğumuz yönlendirmeyi
//buradan ayarlıyoruz.
router.POST("/yukle", func(c *gin.Context) {
//form içerisindeki dosya hariç verilerimizi
//atayalım
isim := c.PostForm("isim")
eposta := c.PostForm("email")
// Dosyamızı ise özel fonksiyon ile atıyoruz
dosya, hata := c.FormFile("dosya")
//Hata kontrolü yapmayı unutmayalım.
if hata != nil {
c.String(400, fmt.Sprintf("Form Hatası: %s", hata.Error()))
return
}
//yüklenecek olan dosyanın ismini alalım.
dosyaismi := filepath.Base(dosya.Filename)
//yüklenen dosyanın kaydedileceği konum
// dizin + dosyaismi
kayıtYeri := "./website/" + dosyaismi
//dosyayı kaydedelim ve hata kontrolü yapalım.
if hata := c.SaveUploadedFile(dosya, kayıtYeri); hata != nil {
c.String(400, fmt.Sprintf("Dosya Yükleme Hatası: %s", hata.Error()))
return
}
//Şuana kadar herhangi bir sıkıntı ile
//karşılaşmadıysak, olumlu mesajımızı gösterelim.
c.String(200, fmt.Sprintf("%s isimli dosya başarıyla yüklendi \nİsim: %s\nE-posta: %s", dosya.Filename, isim, eposta))
})
router.Run(":8080")
}