在Go語言中,我們經常需要設置或恢復HTTP響應的文件頭。通過設置文件頭,我們可以控制瀏覽器或客戶端如何處理響應內容。那么,在Go中,如何從響應正文設置或恢復文件頭呢?在本文中,php小編新一將為您詳細介紹這個問題的解決方案。無論您是新手還是有經驗的開發者,本文都將為您提供有用的信息和示例代碼,幫助您輕松應對這個問題。讓我們開始吧!
問題內容
我在恢復通過 GET 請求的響應發送的多個文件頭以進行壓縮時遇到一些問題。這里的主要問題是我想擺脫 Go 為文件設置的默認日期“1979 年 11 月 30 日”(文件壓縮后),而不是那樣,我希望顯示當前日期。但是我不知道如何修改甚至從文件中檢索標頭,因為我從響應正文中接收到 io.ReadCloser 類型。
這是當前代碼
archive := zip.NewWriter(w) attachment := "attachment; filename=someZipFile.zip") c.Writer.Header().Set("Content-Disposition", attachment) for i := 0; i < len(bodies); i++ { // bodies are response bodies, corresponding to "downloaded" files defer bodies[i].Close() fmt.Println(filenames[i]) w, err := archive.Create("someZipFile/" + filenames[i]) if err != nil { fmt.Println("File couldn't be created") return true } if _, err := io.Copy(w, bodies[i]); err != nil { fmt.Println("File couldn't be written") return true } } archive.Close()
登錄后復制
我想澄清我能做什么,是創建新標頭還是編輯現有標頭,如果是前者,如何獲取文件標頭。在最壞的情況下,找出一個全新的解決方案。
解決方法
Create 是一個調用 CreateHeader 的輔助方法。直接調用CreateHeader指定文件元數據:
w, err := archive.CreateHeader(&zip.FileHeader{ Name: "someZipFile/" + filenames[i], Method: zip.Deflate, Modified: time.Now(), })
登錄后復制
更改調用以創建存檔文件,如下所示。按原樣使用問題中的其他代碼。