Golang 提供兩種方法處理 HTTP 檔案下載:使用 net/http 程式庫,可透過 http.FileServer() 方法處理檔案請求。使用第三方函式庫 github.com/CloudyKit/jet,提供暫停和恢復下載等進階特性,可使用 jet.Get() 方法處理檔案下載。
如何使用Golang 處理HTTP 檔案下載
介紹
處理HTTP 文件下載是Web 開發中的常見任務。 Golang 提供了多種方法來實現此目的。本文將介紹使用 net/http
函式庫和第三方函式庫 github.com/CloudyKit/jet
處理 HTTP 檔案下載的兩種方法。
使用net/http
庫
要使用net/http
庫處理文件下載,可以使用 http.FileServer()
方法。此方法接受一個檔案系統指標作為參數,並將其用於處理檔案請求。
import ( "log" "net/http" ) func main() { fs := http.FileServer(http.Dir("./files")) http.Handle("/files/", http.StripPrefix("/files", fs)) log.Fatal(http.ListenAndServe(":8080", nil)) }
在這個方法中,/files
URL 前綴下的所有請求將由 http.FileServer()
處理。
使用github.com/CloudyKit/jet
函式庫
github.com/CloudyKit/jet
是一個用於處理文件下載的第三方函式庫。它提供了更高層級的特性,例如暫停和恢復下載。
import ( "log" "net/http" "github.com/CloudyKit/jet/v6" ) func main() { engine := jet.NewEngine() http.Handle("/", engine) log.Fatal(http.ListenAndServe(":8080", nil)) }
在 jet
中,可以使用 jet.Get()
方法處理檔案下載。若要指定文件,請使用 filepath.Abs()
函數取得文件的絕對路徑。
import ( "log" "net/http" "os" "github.com/CloudyKit/jet/v6" ) func main() { engine := jet.NewEngine() engine.Get("/", func(c *jet.Context) error { filePath, err := filepath.Abs("file.txt") if err != nil { return err } f, err := os.Open(filePath) if err != nil { return err } defer f.Close() return engine.ServeContent(c.ResponseWriter(), c.Request(), "file.txt", time.Now(), f) }) log.Fatal(http.ListenAndServe(":8080", engine)) }
實戰案例
想想像一個線上檔案儲存平台。使用者可以上傳檔案並存取已上傳的檔案。使用 github.com/CloudyKit/jet
函式庫,可以輕鬆實現檔案下載功能。
package main import ( "log" "net/http" "github.com/CloudyKit/jet/v6" ) type fileStore struct { files map[string][]byte } func main() { fs := &fileStore{files: make(map[string][]byte)} engine := jet.NewEngine() engine.Get("/", func(c *jet.Context) error { // 返回可用文件列表 }) engine.Post("/", func(c *jet.Context) error { // 将文件保存到文件存储中 }) engine.Get("/download/:file", func(c *jet.Context) error { file := c.Params["file"] data, ok := fs.files[file] if !ok { return http.StatusNotFound } return engine.ServeContent(c.ResponseWriter(), c.Request(), file, time.Now(), data) }) log.Fatal(http.ListenAndServe(":8080", engine)) }
在本例中,fileStore
結構用於儲存上傳的檔案。檔案下載處理程序(engine.Get("/download/:file")
)從檔案儲存中取得請求的檔案並將其提供給客戶端。
以上是如何使用 Golang 處理 HTTP 檔案下載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!