Dosyadan veri sunma
Gin, istemcilere dosya sunmak için çeşitli metodlar sağlar. Her metod farklı bir kullanım senaryosuna uygundur:
c.File(path)— Yerel dosya sisteminden bir dosya sunar. İçerik türü otomatik olarak algılanır. Derleme zamanında tam dosya yolunu bildiğinizde veya zaten doğruladığınızda kullanın.c.FileFromFS(path, fs)— Birhttp.FileSystemarayüzünden dosya sunar. Gömülü dosya sistemlerinden (embed.FS), özel depolama arka uçlarından dosya sunarken veya belirli bir dizin ağacına erişimi kısıtlamak istediğinizde faydalıdır.c.FileAttachment(path, filename)—Content-Disposition: attachmentbaşlığını ayarlayarak dosyayı indirme olarak sunar. Tarayıcı, diskteki orijinal dosya adından bağımsız olarak sağladığınız dosya adını kullanarak kullanıcıdan dosyayı kaydetmesini ister.
package main
import ( "net/http"
"github.com/gin-gonic/gin")
func main() { router := gin.Default()
// Serve a file inline (displayed in browser) router.GET("/local/file", func(c *gin.Context) { c.File("local/file.go") })
// Serve a file from an http.FileSystem var fs http.FileSystem = http.Dir("/var/www/assets") router.GET("/fs/file", func(c *gin.Context) { c.FileFromFS("fs/file.go", fs) })
// Serve a file as a downloadable attachment with a custom filename router.GET("/download", func(c *gin.Context) { c.FileAttachment("local/report-2024-q1.xlsx", "quarterly-report.xlsx") })
router.Run(":8080")}İndirme uç noktasını curl ile test edebilirsiniz:
# The -v flag shows the Content-Disposition headercurl -v http://localhost:8080/download --output report.xlsx
# Serve a file inlinecurl http://localhost:8080/local/fileBir io.Reader’dan (uzak URL veya dinamik olarak oluşturulan içerik gibi) veri akışı için bunun yerine c.DataFromReader() kullanın. Ayrıntılar için Reader’dan veri sunma sayfasına bakın.