开发者社区> 问答> 正文

jfinal文件上传问题? 400 报错

jfinal文件上传问题? 400 报错

@jfinal ,利用enctype="multipart/form-data"的方式上传文件时,在getFIle之前用renderJson并return,客户端接收不到,客户端报错:ERR_CONNECTION_RESET。

如果在renderJson之前先调用getFIle就不会出错。同样的问题出现在被拦截器拦下,同样的renderJson并return了内容到客户端,客户端一样接收不到。这样处理的结果就是必须先保存文件,当然可以立马删除,但是这样处理太不科学了。

有什么办法可以解决吗,谢谢?

展开
收起
爱吃鱼的程序员 2020-06-03 11:49:14 583 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    白皮书写了 如果是 enctype="multipart/form-data" 必须先调用getFile方法,才能正常 。######回复 @lusheng6323 : 如果不需要获取参数,在拦截器中不去读取请求中的参数,不受影响,直接判断用户是否登录即可######关键是我对本次请求不需要读取。我的业务逻辑大概是这样:1、未登录不允许上传,本来有个全局连接器,不需要取任何参数直接就返回客户端。2、登录用户有个上传文件数量限制,在取参数之前就判断是否达到限制,如果达到自己返回客户端。上述两种情况都是一样的,都是不需要取数据就返回客户端。 @jfinal ,请问处理上有没有好的建议!######

        当请求到达 tomcat、jetty 这类容器时,容器会将请求封装成一个 HttpServletRequest 对象,开发者可以使用这个对象获取请求中的各类参数,例如:request.getParameter(name)。

        而enctype="multipart/form-data" 请求到达 tomcat、jetty这类容器时,请求中的参数与上传文件内容是混合在一起需要自行解析才能得到parameter 以及上传的 files。所以便出现了common-upload、cos 这类文件上传解析的第三方框架。

         上面所说的关键点是,当上传文请求到达时,参数与上传文件都是无法读取到的,必须要对请求进行解析,所以,必须要在一个适当的时机将请求解析成 MultipartRequest 对象,jfinal 将时机选择在了调用 getFile(...) 之时。

        还有一种方案是每次请求对请求类型进行判断再进行解析,但 99.9% 的请求都是普通的请求而无需解析,所以为了这 0.1% 的请求在每次请求到来时都做一下是否该解析的判断不划算。

         以下是判断请求是否为 multipart request 需要被解析的代码:

    String content_type = controller.getRequest().getContentType();
    if (content_type != null && content_type.toLowerCase().indexOf("multipart") != -1)
      //  需要解析的情况

        jfinal 极度关注性能,有性能洁癖,所以不希望为那 0.1% 的请求概率而添加上面的代码,而是选择了 getFile(..) 这个时机进行操作

    ######谢谢,耐心解答。######不好意思,手机敲的,上面有两处错误:1、拦截器写成了连接器。2、直接返回写成了自己返回。
    2020-06-03 11:49:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载