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

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