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提交文件時,可以直接通過複製臨時文件來達到目的。