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

Nguồn tham khảo:

https://github.com/kataras/iris/wiki/File-server


1 phút dành cho quảng cáo (again and again) :v

Techmaster đang có Lộ trình đào tạo Full-Stack Developer trong 8 tháng, cam kết việc làm cho các bạn học viên tốt nghiệp. Học viên đã tốt nghiệp sau 2 tháng nếu vẫn không xin được việc thì sẽ được hoàn lại 100% học phí.

Nếu các bạn chỉ quan tâm đến lập trình Web Back-End và muốn học một khóa ngắn gọn, cô đọng, có nhiều ví dụ thực tế có thể áp dụng được ngay, các bạn có thể tham khảo khóa Xây dựng ứng dụng Web bán hàng bằng Golang