第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在沒有內(nèi)存分配的情況下壓縮和發(fā)布文件

如何在沒有內(nèi)存分配的情況下壓縮和發(fā)布文件

Go
紫衣仙女 2023-02-06 14:41:11
有誰知道我如何打開一個文件,在旅途中對其進(jìn)行 gzip 壓縮并使用 post 請求將其發(fā)送到服務(wù)器?我有一個文件,它是一個閱讀器。此外,我還具有http.Post()可以將讀取器作為第三個參數(shù)傳遞的功能。但是gzip.NewWriter()期待一個作家并返回一個作家。我知道我可以創(chuàng)建一些中間緩沖區(qū)來連接這一切,但我不想分配太多內(nèi)存,因?yàn)檫@些文件可能非常大。有沒有辦法制作這個管道并將其傳遞給 HTTP post 請求?
查看完整描述

1 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊

其他答案概述了如何使用 io.Pipe。這個答案顯示了更多細(xì)節(jié),特別是關(guān)于錯誤處理。


func gzFileReader(fname string) (io.ReadCloser, error) {

    f, err := os.Open(fname)

    if err != nil {

        return nil, err

    }


    // Use io.Pipe and a goroutine to create reader

    // on data written by the appliation.

    r, w := io.Pipe()

    go func() {

        // Always close the file.

        defer f.Close()


        // Copy file through gzip to pipe writer.

        gzw := gzip.NewWriter(w)

        _, err := io.Copy(gzw, f)


        // Use CloseWithError to propgate errors back to

        // the main goroutine.

        if err != nil {

            w.CloseWithError(err)

            return

        }


        // Flush the gzip writer.

        w.CloseWithError(gzw.Close())

    }()

    return r, nil

}

使用這樣的功能:


body, err := gzFileReader("example.txt")

if err != nil {

    log.Fatal(err)

}

defer body.Close()


req, err := http.NewRequest("POST", "http://example.com/", body)

if err != nil {

    log.Fatal(err)

}

req.Header.Set("Content-Encoding", "gzip")

resp, err := http.DefaultClient.Do(req)


查看完整回答
反對 回復(fù) 2023-02-06
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號