首頁  >  文章  >  後端開發  >  如何在 Go 中從響應正文設定或恢復文件頭?

如何在 Go 中從響應正文設定或恢復文件頭?

PHPz
PHPz轉載
2024-02-09 11:30:091148瀏覽

如何在 Go 中从响应正文设置或恢复文件头?

在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(),
    })

更改呼叫以建立存檔文件,如下所示。按原樣使用問題中的其他程式碼。

以上是如何在 Go 中從響應正文設定或恢復文件頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除