pemrograman

04 Mempelajari Serve File

Pengertian Serve File

Pada materi Membuat Web Golang. Maka pada Router pun sudah mendukung serve static file menggunakan fungsi ServeFiles(Path, FileSystem) yang mana pada Path kita harus menggunakan Catch All Parameters. Sedangkan pada FileSystem bisa melakukan manual load dari folder atau menggunakan golang Embed seperti yang pernah kita bahas di materi sebelumnya.

Berbeda dengan kita membuat handler, untuk membuat serve file kita perlu membuat path directory terlebih dahulu agar bisa terbaca oleh sistem dengan menambahkan kode dibawah ini pada file main.go.

directory, _ := fs.Sub(resources, "resources")

Baca folder menggunakan embeded dengan membuat variabel global yang nantinya bisa dipakai di semua projek.

//go:embed resources
var resources embed.FS

Lalu kita tambahkan router path dimana folder dan file yang bisa dibaca oleh router.

router.ServeFiles("/files/*filepath", http.FS(directory))

Pasitkan juga pada folder tersebut ada file yang terisi karena kita menggunakan go:embed maka ada validasi dari Golang kalau folder tersebut kosong maka program tidak akan jalan.

Jika kamu ingin melihat keseluruhan kode pada file main.go akan seperti dibawah ini.

package main

import (
	"embed"
	"io/fs"
	"net/http"

	"github.com/julienschmidt/httprouter"
)

//go:embed resources
var resources embed.FS

func main() {
	router := httprouter.New()
	directory, _ := fs.Sub(resources, "resources")

	router.GET("/", SampleGetHandler)
	router.POST("/", SamplePostHandler)
	router.GET("/product/:id", GetUsedParamsHandler)
	router.GET("/product/:id/items/:itemId", NamedParameterHandler)
	router.GET("/images/*image", CatchAllParameterHandler)
	router.ServeFiles("/files/*filepath", http.FS(directory))

	server := http.Server{
		Handler: router,
		Addr:    "localhost:8080",
	}

	server.ListenAndServe()
}

Kita akan mencoba melakukan pengetesan dengan menggunakan cURL. Pastikan file pada folder yang dituju oleh router tersedia file-nya agar bisa terbuka datanya.

curl --location --request GET 'http://localhost:8080/files/hello.txt'

Maka jika dieksekusi cURL tersebut akan terlihat hasil seperti ini.

➜  santekno-hugo git:(main) ✗ curl --location --request GET 'http://localhost:8080/files/hello.txt'
Halo Santekno%           
comments powered by Disqus