Chào mừng các bạn quay trở lại với series bài viết về lập trình Web Back-End bằng ngôn ngữ Golang, sử dụng IRIS Framework

Nếu cảm thấy chưa thành thạo với Golang và muốn tìm hiểu thêm, các bạn có thể đọc series bài viết về Golang của Techmaster

Ở bài viết trước, tôi đã giới thiệu về middleware và cách tạo middleware trong IRIS Framework.

Trong bài viết này, tôi hướng dẫn các bạn 2 cách để trả về các file tĩnh (các file CSS, Javascript, ảnh, …) cho client

1. Sử dụng method HandleDir

package main

import (
	"github.com/kataras/iris"
)

func homeHandler(ctx iris.Context) {
	ctx.HTML("Chào mừng đến với Techmaster Việt Nam")
}

func main() {
	app := iris.New()
	app.Handle("GET", "/", homeHandler)
	app.HandleDir("/static", "./assets", iris.DirOptions{
		IndexName: "/index.html",
		ShowList: true,
	})
	app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}

Tham khảo code demo: https://github.com/handuy/golang_web_techmaster/tree/master/iris-static-files

Method HandleDir nhận vào 3 tham số:

– Tên đường dẫn: “/static”

– Địa chỉ của thư mục chứa các file tĩnh: “./assets”

– Struct chứa các option:

+ IndexName: Đường dẫn đến file HTML. File HTML này sẽ được trả về client khi có GET request gửi đến /static

+ ShowList: Liệt kê các file có trong thư mục được request

Khi gọi đến đường dẫn /static, server trả về file index.html trong thư mục assets:

Khi gọi đến /static/css, server trả về danh sách các file có trong thư mục css:

Click vào tên file thì server trả về nội dung file đó:

2. Sử dụng method ServeFile

Vẫn với cấu trúc thư mục như ở ví dụ trên, lần này ta sẽ tạo một đường dẫn có dạng /static/{folder}/{file} và tạo một hàm xử lý để trả về file tương ứng:

package main

import (
	"github.com/kataras/iris"
	"fmt"
)

func homeHandler(ctx iris.Context) {
	ctx.HTML("Chào mừng đến với Techmaster Việt Nam")
}

func serveFileHandler(ctx iris.Context) {
	folder := ctx.Params().Get("folder")
	file := ctx.Params().Get("file")
	// đường dẫn trỏ đến file trong thư mục assets
	filePath := fmt.Sprintf("./assets/%s/%s", folder, file)
	ctx.ServeFile(filePath, false)
}

func main() {
	app := iris.New()
	app.Get("/", homeHandler)
	app.Get("/static/{folder}/{file}", serveFileHandler)
	
	app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}

Tham khảo code demo: https://github.com/handuy/golang_web_techmaster/tree/master/iris-static-file-serve

Đoạn code trên sử dụng hàm ctx.Params().Get(“keyname”) để lấy thông tin file từ trong đường dẫn URL. Trường hợp bạn quên thì có thể xem lại bài viết về Routing

Hàm ServeFile yêu cầu 2 tham số:

– Đường dẫn trỏ đến file cần trả về

– Giá trị boolean True/False để xác định xem có cần được nén hay không: Như ở code trên thì ta không nén

Trên đây là 2 cách để trả về file tĩnh với IRIS framework. Trong bài viết sau, tôi sẽ hướng dẫn các bạn cách trả về các file HTML, thay vì viết code HTML dưới dạng chuỗi string

Bạn muốn học lập trình hãy liên hệ ngay với Mỹ Vân để được nhận ưu đãi từ học viện nhé
Học lập trình tại Đà Nẵng
Học lập trình tại Đà Nẵng 0935029202
Số tài khoản : 56110000942174 BIDV Chi nhánh Đà Nẵng
HUYNH THI MY VAN
Khóa học Lập trình Python