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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

限制 FormFile 中的文件大小

限制 FormFile 中的文件大小

Go
慕妹3146593 2021-09-13 10:10:38
我讓用戶使用 FormFile 上傳文件。我應(yīng)該在什么時(shí)候檢查文件大小是否太大。當(dāng)我做 file, header, fileErr := r.FormFile("file")文件對(duì)象已經(jīng)創(chuàng)建。那么我是否已經(jīng)承擔(dān)了讀取整個(gè)文件的成本?https://golang.org/pkg/net/http#Request.FormFile
查看完整描述

3 回答

?
翻閱古今

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

使用http.MaxBytesReader限制從請(qǐng)求中讀取的字節(jié)數(shù)。在調(diào)用 ParseMultiPartForm 或 FormFile 之前,執(zhí)行以下行:

 r.Body = http.MaxBytesReader(w, r.Body, max)

這里r*http.Requestwhttp.Response。

MaxBytesReader 限制為整個(gè)請(qǐng)求正文而不是單個(gè)文件讀取的字節(jié)數(shù)。當(dāng)只有一個(gè)文件上傳時(shí),請(qǐng)求正文大小的限制可以很好地近似于文件大小的限制。如果您需要對(duì)一個(gè)或多個(gè)文件實(shí)施特定限制,請(qǐng)為所有預(yù)期請(qǐng)求數(shù)據(jù)設(shè)置足夠大的 MaxBytesReader 限制,并檢查每個(gè)文件的FileHeader.Size。

當(dāng)超出 http.MaxBytesReader 限制時(shí),服務(wù)器將停止從請(qǐng)求中讀取數(shù)據(jù)并在處理程序返回后關(guān)閉連接。

如果要限制使用的內(nèi)存量而不是請(qǐng)求正文大小,請(qǐng)?jiān)谡{(diào)用r.ParseMultipartForm(maxMemory)之前調(diào)用r.FormFile()。這將使用最多maxMemory字節(jié)的文件部分,其余部分存儲(chǔ)在磁盤上的臨時(shí)文件中。此調(diào)用不限制從客戶端讀取的總字節(jié)數(shù)或上傳文件的大小。

檢查請(qǐng)求 Content-Length標(biāo)頭不起作用有兩個(gè)原因:

  • 未為分塊請(qǐng)求正文設(shè)置內(nèi)容長度。

  • 服務(wù)器可以讀取整個(gè)請(qǐng)求正文以支持連接保持活動(dòng)。違反 MaxBytesReader 限制是確保服務(wù)器停止讀取請(qǐng)求正文的唯一方法。


查看完整回答
反對(duì) 回復(fù) 2021-09-13
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

有些人建議依賴Content-Lengthheader,我不得不警告你根本不要使用它。此標(biāo)頭可以是任意數(shù)字,因?yàn)闊o論實(shí)際文件大小如何,客戶端都可以更改它。


使用MaxBytesReader因?yàn)椋?/p>


MaxBytesReader 防止客戶端意外或惡意發(fā)送大請(qǐng)求并浪費(fèi)服務(wù)器資源。


下面是一個(gè)例子:


r.Body = http.MaxBytesReader(w, r.Body, 2 * 1024 * 1024) // 2 Mb

clientFile, handler, err := r.FormFile(formDataKey)

if err != nil {

    log.Println(err)

    return

}

如果您的請(qǐng)求正文大于 2 Mb,您將看到如下內(nèi)容: multipart: NextPart: http: request body too large


查看完整回答
反對(duì) 回復(fù) 2021-09-13
?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

調(diào)用FormFilecalls?ParseMultiPartForm,它將解析整個(gè)請(qǐng)求正文,默認(rèn)情況下最多使用 32M,然后將內(nèi)容存儲(chǔ)到臨時(shí)文件中。您可以ParseMultiPartForm在調(diào)用之前調(diào)用自己FormFile以確定要消耗多少內(nèi)存,但仍然會(huì)解析主體。

客戶端可能會(huì)提供您可以使用的Content-Length標(biāo)頭multipart.FileHeader,但這取決于客戶端。

如果您想限制傳入的請(qǐng)求大小,請(qǐng)?jiān)诮馕鋈魏?Body 之前將request.Bodywith包裝MaxBytesReader在您的處理程序中。



查看完整回答
反對(duì) 回復(fù) 2021-09-13
  • 3 回答
  • 0 關(guān)注
  • 230 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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