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 这个内置对象。

    image-20220916181513532

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

    image-20220916181505133

其原因是我们在解析 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 提交文件时,可以直接通过复制临时文件来达到目的。

参考博客:https://blog.csdn.net/qq_42461790/article/details/107127969

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值