Netty FileUpload 識別不了某些文件 (FileUpload.getFile()方法的一些坑)

Netty 作爲服務器接收文件時,通常採用的是form-data的方式去接收文件。

那麼,在某些情況下明明識別了form-data是文件, FileUpload.getFile()卻還是報出異常

問題是什麼?

通過斷點,我們可以看到,出現異常時,FileUpload對象中,並沒有File 這個內置對象。

而未出現異常的文件,FileUpload對象中是存在File這個對象的。

原因是:

你在解析這個form-data,採用的策略!

如下:

網絡上普遍的接收策略都是:

private static final HttpDataFactory factory = new DefaultHttpDataFactory(DefaultHttpDataFactory.MINSIZE);

這個策略會導致一個問題,就是form-data傳過來的文件,如果小於16KB,就單純的當做ByteBf來處理。

知道問題就簡單了,我們修改下策略。

//解析文件大小(如果是:minSize則會過濾掉16K以下的文件,這個則不限制文件最小長度)
private static final HttpDataFactory factory = new DefaultHttpDataFactory(DefaultHttpDataFactory.MAXSIZE);

這個策略是隻要是文件,就會識別爲File對象,使用form-data提交文件時,可以直接通過複製臨時文件來達到目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章