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
Bình luận