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

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

如何檢查通過多部分形式發(fā)布的文件是否為圖像類型,并且它是否小于 Go 中的給定 maxsize?

如何檢查通過多部分形式發(fā)布的文件是否為圖像類型,并且它是否小于 Go 中的給定 maxsize?

Go
慕工程0101907 2021-11-08 15:37:29
我想知道是否有辦法在將其上傳到服務(wù)器之前檢查大小和類型。我擔心人們試圖上傳非常大的文件來故意降低服務(wù)器的速度。我只知道如何在將文件復制到服務(wù)器后檢查文件的大小。我不知道如何檢查文件類型。我想在必須上傳 2 GB 數(shù)據(jù)然后驗證文件之前執(zhí)行此操作。這是我到目前為止所擁有的,但這首先將文件復制到服務(wù)器,這不是我想要的。func userUploadImage(w http.ResponseWriter, r *http.Request, _ httprouter.Params) error {    mpf, mpfh, err := r.FormFile("file")    if err != nil {        return nil    }    defer mpf.Close()    dstFile, err := os.Create(config.UploadDir + "/img/" + mpfh.Filename)    if err != nil {        return err    }    defer dstFile.Close()    size, err := io.Copy(dstFile, mpf)    if err != nil {        return err    }    spew.Dump(size)    return nil}
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

為了避免將大量數(shù)據(jù)上傳到您的服務(wù)器,我建議將您的 包裝起來multipart.File,這本質(zhì)上是一個io.Reader帶有io.LimitedReader,例如

wrapped := io.LimitReader(mpf,10*1024*1024)    //10 MiB

然后在wrapped閱讀器上工作。這將讀取指定數(shù)量的字節(jié),然后返回 EOF,因此任何大于 10 MiB 的內(nèi)容都將被截斷。

要檢查接收到的數(shù)據(jù)是否為圖像,您有兩種選擇:

  1. 使用 解析數(shù)據(jù)image.Decode(io.Reader),如果無法將數(shù)據(jù)解析為圖像,則會拋出錯誤 - 這還允許您檢查接收到的數(shù)據(jù)是否完整和正確。但是請注意,這需要一些時間/竊取性能。也許你想避免這種情況,如果你之后只是丟棄解碼的圖像。請務(wù)必檢查圖像包的godoc,因為您必須導入您希望解碼的任何格式。

  2. 檢查幻數(shù),例如 PNG 文件89 50 4e 47 0d 0a 1a 0a作為它們的幻數(shù)。然而,正確的幻數(shù)并不意味著正確的圖像。特別是如果您將較大的圖像截斷為 10 MiB。

如果您有能力解碼手頭的每張圖像,那就去做吧——結(jié)果應(yīng)該更精確,但這只是一個建議。

我寧愿不檢查文件類型的 FileHeader (pkg/mime/multipart/#FileHeader),我希望它不可靠。但是,您可能會在其中找到有關(guān)(原始)文件大小的信息,我建議您只為某些請求轉(zhuǎn)儲 FileHeaders。


查看完整回答
反對 回復 2021-11-08
  • 1 回答
  • 0 關(guān)注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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