php小編蘋果為你帶來了使用Gin在HTTP伺服器中即時產生zip/7z存檔的簡潔指南。 Gin是一個輕量級的Go語言框架,具有高效能和易用性。本文將介紹如何使用Gin處理HTTP請求,並透過呼叫系統指令和第三方函式庫來產生zip和7z存檔檔。無論你是初學者還是有經驗的開發者,跟隨本教程,你將能夠輕鬆實現這一功能,並為你的網頁應用程式增添更多的價值。讓我們開始吧!
我使用 Gin 建立一個 HTTP 伺服器,我想提供使用者動態產生的 zip 檔案。
理論上,我可以先在檔案系統上產生一個 zip 文件,然後提供它。但這確實是一個糟糕的方法(在開始下載之前等待 5 分鐘)。我想立即開始將其提供給用戶並在生成內容時推送內容。
我找到了 DataFromReader(範例),但在存檔完成之前不知道 ContentLength。
func DownloadEndpoint(c *gin.Context) { ... c.DataFromReader( http.StatusOK, ContentLength, ContentType, Body, map[string]string{ "Content-Disposition": "attachment; filename=\"archive.zip\""), }, ) }
我怎麼才能做到這一點?
使用串流方法和archive/zip 您可以動態建立 zip 並將其串流傳輸到伺服器。
package main import ( "os" "archive/zip" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.Writer.Header().Set("Content-type", "application/octet-stream") c.Stream(func(w io.Writer) bool { // Create a zip archive. ar := zip.NewWriter(w) file1, _ := os.Open("filename1") file2, _ := os.Open("filename2") c.Writer.Header().Set("Content-Disposition", "attachment; filename='filename.zip'") f1, _ := ar.Create("filename1") io.Copy(f1, file1) f2, _ := ar.Create("filename2") io.Copy(f2, file2) ar.Close() return false }) }) r.Run() }
直接使用ResponseWriter
#package main import ( "io" "os" "archive/zip" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.Writer.Header().Set("Content-type", "application/octet-stream") c.Writer.Header().Set("Content-Disposition", "attachment; filename='filename.zip'") ar := zip.NewWriter(c.Writer) file1, _ := os.Open("filename1") file2, _ := os.Open("filename2") f1, _ := ar.Create("filename1") io.Copy(f1, file1) f2, _ := ar.Create("filename1") io.Copy(f1, file2) ar.Close() }) r.Run() }
以上是如何使用 Gin 在 HTTP 伺服器中即時產生 zip / 7z 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!