0
点赞
收藏
分享

微信扫一扫

Netty使用FileUpload报错Not represented by a file


最近在使用 Netty 处理 post 的时候,在解析 form-data 时,针对上传的文件,有些文件是正常的,但是有些文件就会报如下错误:

java.io.IOException: Not represented by a file
at io.netty.handler.codec.http.multipart.AbstractMemoryHttpData.getFile(AbstractMemoryHttpData.java:288)
at io.netty.handler.codec.http.multipart.MixedFileUpload.getFile(MixedFileUpload.java:306)
...

通过断点可以看到:

  • 当出现异常的时候,FileUpload对象中,并没有File 这个内置对象。
  • 当没有出现异常的时候,FileUpload 对象中是存在 File 这个对象的。

其原因是我们在解析 form-data 的时候使用的策略导致的。

  • 网络上普遍的接收策略都是:

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

这个策略会导致一个问题,就是 form-data 传过来的文件,如果小于 16KB,就单纯的当做 ByteBuf 来处理。

  • 要解决这个问题,需要我们修改一下策略:

//解析文件大小(如果是:minSize则会过滤掉16K以下的文件,这个则不限制文件最小长度)
private static final HttpDataFactory factory = new DefaultHttpDataFactory(DefaultHttpDataFactory.MAXSIZE);

这个策略是只要是文件,就会识别为 File 对象,使用 form-data 提交文件时,可以直接通过复制临时文件来达到目的。



举报

相关推荐

0 条评论