Golang - Iris Web Framework #18: File Server

18 tháng 02, 2020 - 1645 lượt xem

Phục vụ các tệp tĩnh từ một thư mục cụ thể (vật lý hệ thống hoặc được nhúng vào ứng dụng) được thực hiện vào phương thức Party.HandleDir.

HandleDir đăng ký một trình xử lý phục vụ các yêu cầu HTTP với nội dung của một hệ thống tệp (vật lý hoặc được nhúng).

  • Tham số đầu tiên: đường dẫn tuyến.
  • Tham số thứ hai: hệ thống hoặc thư mục nhúng cần được phục vụ.
  • Tham số thứ ba: không bắt buộc, các tùy chọn thư mục, đặt trường là tùy chọn.

Trả về GET *Route.

HandleDir(requestPath, directory string, opts ...DirOptions) (getRoute *Route)

Cấu trúc DirOptions trông như sau:

type DirOptions struct {
    // Defaults to "/index.html", if request path is ending with **/*/$IndexName
    // then it redirects to **/*(/) which another handler is handling it,
    // that another handler, called index handler, is auto-registered by the framework
    // if end developer wasn't managed to handle it manually/by hand.
    IndexName string
    // Should files served under gzip compression?
    Gzip bool

    // List the files inside the current requested directory if `IndexName` not found.
    ShowList bool
    // If `ShowList` is true then this function will be used instead
    // of the default one to show the list of files of a current requested directory(dir).
    DirList func(ctx iris.Context, dirName string, dir http.File) error

    // When embedded.
    Asset      func(name string) ([]byte, error)   
    AssetInfo  func(name string) (os.FileInfo, error)
    AssetNames func() []string

    // Optional validator that loops through each found requested resource.
    AssetValidator func(ctx iris.Context, name string) bool
}

Giả sử bạn có một thư mục ./assets gần với tệp thực thi của mình và bạn muốn các tệp được phục vụ thông qua http://localhost:8080/static/**/*.

app := iris.New()

app.HandleDir("/static", "./assets")

app.Run(iris.Addr(":8080"))

Bây giờ nếu bạn muốn nhúng các tệp tĩnh không phụ thuộc vào thư mục hệ thống, bạn có thể sử dụng một cung cụ như go-bindata để chuyển đổi các tệp thành []byte trong chương trình của bạn. Hãy xem hướng dẫn nhanh về điều này và cách Iris trợ giúp các dữ liệu đó.

Cài đặt go-bindata:

go get -u github.com/go-bindata/go-bindata/...

Điều hướng đến thư mục chương trình của bạn, rằng thư mục con ./assets tồn tại và thực thi.

$ go-bindata ./assets/...

Ở trên tạo ra một tệp go được tạo có chứa ba chức năng chính: Asset, AssetInfo và AssetNames. Sử dụng chúng trên DirOptions:

// [app := iris.New...]

app.HandleDir("/static", "./assets", iris.DirOptions {
    Asset: Asset,
    AssetInfo: AssetInfo,
    AssetNames: AssetNames,
    Gzip: false,
})

Xây dựng ứng dụng của bạn:

$ go build

HandleDir hỗ trợ tất cả các tiêu chuẩn, bao gồm phạm vi nội dung, cho tất cả thư mục vật lý và thư mục nhúng.

Tuy nhiên nếu bạn chỉ cần một trình xử lý để làm việc, mà không cần đăng ký tuyến, bạn có thể sử dụng hàm iris.FileServer để thay thế.

Hàm FileServer trả về một Handler hỗ trợ các tệp từ một hệ thống cụ thể, vật lý, danh mục hoặc một tệp nhúng.

  • Tham số đầu tiên: là thư mục.
  • Tham số thứ hai: tham số tùy chọn là bất kỳ cài đặt tùy chọn nào mà người gọi có thể sử dụng.
iris.FileServer(directory string, options ...DirOptions)

Sử dụng:

handler := iris.FileServer("./assets", iris.DirOptions {
    ShowList: true, Gzip: true, IndexName: "index.html",
})

Xem ví dụ tại https://github.com/kataras/iris/tree/master/_examples/file-server.

Phần tiếp theo chúng ta sẽ tìm hiểu về View.

Bình luận

avatar
Nguyễn Hàn Duy 2020-02-19 08:36:22.579882 +0000 UTC
Thanks ad
Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0