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ù)是否為圖像,您有兩種選擇:
使用 解析數(shù)據(jù)
image.Decode(io.Reader)
,如果無法將數(shù)據(jù)解析為圖像,則會拋出錯誤 - 這還允許您檢查接收到的數(shù)據(jù)是否完整和正確。但是請注意,這需要一些時間/竊取性能。也許你想避免這種情況,如果你之后只是丟棄解碼的圖像。請務(wù)必檢查圖像包的godoc,因為您必須導入您希望解碼的任何格式。檢查幻數(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。
- 1 回答
- 0 關(guān)注
- 246 瀏覽
添加回答
舉報