在Go語言中,我們經(jīng)常需要設(shè)置或恢復(fù)HTTP響應(yīng)的文件頭。通過設(shè)置文件頭,我們可以控制瀏覽器或客戶端如何處理響應(yīng)內(nèi)容。那么,在Go中,如何從響應(yīng)正文設(shè)置或恢復(fù)文件頭呢?在本文中,php小編新一將為您詳細(xì)介紹這個(gè)問題的解決方案。無論您是新手還是有經(jīng)驗(yàn)的開發(fā)者,本文都將為您提供有用的信息和示例代碼,幫助您輕松應(yīng)對這個(gè)問題。讓我們開始吧!
問題內(nèi)容
我在恢復(fù)通過 GET 請求的響應(yīng)發(fā)送的多個(gè)文件頭以進(jìn)行壓縮時(shí)遇到一些問題。這里的主要問題是我想擺脫 Go 為文件設(shè)置的默認(rèn)日期“1979 年 11 月 30 日”(文件壓縮后),而不是那樣,我希望顯示當(dāng)前日期。但是我不知道如何修改甚至從文件中檢索標(biāo)頭,因?yàn)槲覐捻憫?yīng)正文中接收到 io.ReadCloser 類型。
這是當(dāng)前代碼
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()
登錄后復(fù)制
我想澄清我能做什么,是創(chuàng)建新標(biāo)頭還是編輯現(xiàn)有標(biāo)頭,如果是前者,如何獲取文件標(biāo)頭。在最壞的情況下,找出一個(gè)全新的解決方案。
解決方法
Create 是一個(gè)調(diào)用 CreateHeader 的輔助方法。直接調(diào)用CreateHeader指定文件元數(shù)據(jù):
w, err := archive.CreateHeader(&zip.FileHeader{ Name: "someZipFile/" + filenames[i], Method: zip.Deflate, Modified: time.Now(), })
登錄后復(fù)制
更改調(diào)用以創(chuàng)建存檔文件,如下所示。按原樣使用問題中的其他代碼。