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提交文件时,可以直接通过复制临时文件来达到目的。