当前位置: 首页 > news >正文

jsp 上传文件及实体信息,ajax post 请求(formdata)报错400<======>前后端代码示例

Content-Type最常见的几种类型:

通常,没有声明,默认application/x-www-form-urlencoded

application/x-www-form-urlencoded  form表单默认的数据格式,提交的数据形式 key1=val1&key2=val2(参数少)

multiple/form-data 一般用来上传文件,也可以上传普通数据

application/json json对象(参数多)

post请求postman的几种参数格式区别:

form-data对应的是以form表单提交传值的情形,等价于http请求中的multipart/form-data

x-www-form-urlencoded即application/x-www-from-urlencoded,将表单内的数据转换为Key-Value;

raw对应的是入参是任意格式的可以上传任意格式的【文本】,可以上传text、json、xml、html等,使用较少;

binary相当于Content-Type:application/octet-stream,只可以上传二进制数据,通常用来上传文件,但是一次只能上传一个文件;

 毫无前端基础的开发人员,独立完成页面开发,排查问题,困难重重!摸索虽然浪费时间,无法按时完成任务,但这些坑终究是要自己去踩的!不够了解contentType,不清楚传payload数据是啥,也不清楚web页面inspect的使用!经过几天不懈努力完成相关页面设计。交互的问题又来了,这不使用网上的开源代码,自己在家里琢磨,倒腾出来的东西,在公司再验证,遇到了HttpServletRequest无法解析上传的文件,目前没时间去处理。ssh项目架构历史悠久,需要学习的东西居多,工作任务也不轻,忙完前端忙后端。。。

言归正传,问题排查思路。

百度之后,发现是传的参数与后端接口定义的RequestParam的key对应不上。

无外乎:请求参数key一定出错了,或者标签里的name没有填写

79a17cddfcc479d359e96d70e500851a.png

后端接口定义

@RequestMapping(value = "/user/employ/info/upload", method = RequestMethod.POST)
@ResponseBody
public void uploadUserCdAndHm(@RequestParam("cifNo") String cifNo,
                              @RequestParam("name") String name,
                              @RequestParam("employerNo") String employerNo,
                              @RequestParam("type") String type,
                              @RequestParam("permitNo") String permitNo,
                              @RequestParam("permitStart") String permitStart,
                              @RequestParam("permitEnd") String permitEnd,
                              @RequestParam("tpFace") MultipartFile feFaceFile,
                              @RequestParam("tpBack") MultipartFile feBackFile,
                              @RequestParam("employerCredential") MultipartFile biz,
                              HttpSession session, HttpServletRequest request) throws Exception, ApplicationException {

    System.err.println("feFaceFile:" + feFaceFile.getSize());
    System.err.println("feBackFile:" + feBackFile.getSize());
    System.err.println("biz:" + biz.getSize());
    System.err.println("cifNo:" + cifNo);
    // 其他的就不展示了

}

前端div及script

 <div id="tbEmployer">
        <form id="tbEmployerform" method="post" modelAttribute="tbEmployer">
            <table>
                <tr bgcolor="#a9a9a9">
                    <td width="10%" align="left" colspan="10"><h3>勞務信息</h3></td>
                </tr>

                <tr>
                    <td width="12%" align="right"><h3>*僱主姓名(中文):</h3></td>
                    <td align="left">

                        <p class="error-msg" style="color:red; margin:0"></p>
                        <input type="text" id="name" name="name" value="${tbEmployer.name}" required="required"
                               style="width:50%;"
                               maxlength="30"/>
                    </td>
                    <td width="12%" align="right"><h3>*商業登記證號:</h3></td>
                    <td align="left">

                        <p class="error-msg" style="color:red; margin:0"></p>
                        <input type="text" id="employerNo" name="employerNo" value="${tbEmployer.employerNo}"
                               required="required" style="width:50%;"
                               maxlength="10"/>
                        <input type=text style="display:none" name = "cifNo" value="${tbUser.cifNo}">
                    </td>
                </tr>
                <tr>
                    <td width="12%" align="right"><h3>*外僱證類型:</h3></td>
                    <td align="left">

                        <p class="error-msg" style="color:red; margin:0"></p>
                        <input type="text" id="type" name="type"
                               value=${empty idTypeMap[tbEmployer.type] ? tbEmployer.type : idTypeMap[tbEmployer.type]}
                                       required="required" style="width:50%;"
                               maxlength="10"/>
                    </td>
                    <td width="12%" align="right"><h3>*外僱證號碼:</h3></td>
                    <td align="left">

                        <p class="error-msg" style="color:red; margin:0"></p>
                        <input type="text"  id="permitNo" name="permitNo" value="${tbEmployer.permitNo}"
                               required="required" style="width:50%;"
                               maxlength="10"/>
                    </td>
                </tr>
                <tr>
                    <td width="12%" align="right"><h3>*外僱證簽發日期:</h3></td>
                    <td align="left">
                       <fmt:formatDate value="${tbEmployer.permitStart}" var="permitStart" pattern="yyyy-MM-dd"/>
                        <input type="text" name="permitStart" path="permitStart" value="${tbEmployer.permitStart}"/>
                    </td>

                    <td width="12%" align="right"><h3>*外僱證有效期至:</h3></td>
                    <td align="left">
                       <fmt:formatDate value="${tbEmployer.permitEnd}" var="permitEnd" pattern="yyyy-MM-dd"/>
                        <input type="text" name="permitEnd"  path="permitEnd" value="${tbEmployer.permitEnd}"/>
                    </td>
                </tr>

                <tr>
                    <td width="12%" align="right"><h3>*外僱證影像:</h3></td>
                    <td align="left">
                        <div id="tpFaceDiv"><img id="previewTpFace" width=-1 height=-1 style="display:none"/>
                            <input type="file" name="tbFace" id="tpFace"
                                   onchange="javascript:setImagePreview4TpFace();">
                        </div>

                    </td>

                    <td align="left">
                        <div id="tpBackDiv"><img id="previewTpBack" width=-1 height=-1 style="diplay:none"/>
                            <input type="file" name="tpBack" id="tpBack"
                                   onchange="javascript:setImagePreview4TpBack();">
                        </div>

                    </td>
                </tr>

                <tr>
                    <td width="12%" align="right"><h3>*僱主商業登記證影像:</h3></td>
                    <td align="left">
                        <div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none"/>
                            <input type="file" name="employerCredential" id="employerCredential"
                                   onchange="javascript:setImagePreview();">
                        </div>

                    </td>
                </tr>

            </table>
            <input type="button" id="employSubmit" value=上传 onclick="uploadUserEmploy()">
        </form>
    </div>


<script>
    function uploadUserEmploy() {
        console.log("employer upload!")
        var uploadFile = new FormData($("#tbEmployerform")[0]);
        console.log("upload info:" + uploadFile)
        $.ajax({
            url:"${ctx}/user/employ/info/upload.html",
            type:"post",
            data:uploadFile,

            contentType: false, //不设置内容类型
            processData: false, //不处理数据
            success:function(data){
                alert("已上傳!");
            }
        });
    }
</script>

 错误之处

 将tbFace改成tpFace即可!问题就处理啦!

 formdata

总结

上传文件,不进行页面跳转(ajax)。上传文件中间出现,请求方式一致、url漏了后缀报错405!

post 请求,formdata,报错400,请求参数与接口定义的名称不一致!


 

相关文章:

  • 如何下载省,市,区县行政区Shp数据
  • source map 开发优化工具
  • 【ESP32 手机配网教程】
  • CSS的语法规则——基础选择器
  • shell流程控制语句
  • 视频拍摄知识+AIGC数据预处理
  • MurmurHash算法
  • 千帆AppBuilder产品更新日志 速来围观~
  • Qt6.8 GRPC功能使用(2)标准 Qt实现客户端
  • OpenHarmony Docker移植实践
  • 云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全
  • 【每日前端面经】2023-02-27
  • java swing(GUI) MySQL实现的飞机票预定系统源码带视频运行教程
  • Redis 事务
  • LeetCode刷题复盘笔记—一文搞懂纯完全背包问题(动态规划系列第十一篇)
  • python隶属关系图模型:基于模型的网络中密集重叠社区检测方法
  • 【C++】set/multiset/map/multimap
  • Nginx学习总结(目录)
  • 【pen200-lab】10.11.1.8
  • 文件操作及IO
  • 精品基于Javaweb的酒店民宿管理推荐平台SSM
  • [附源码]计算机毕业设计二次元信息分享平台的设计及实现
  • [附源码]Python计算机毕业设计Django勤工助学管理系统
  • Request和Response基础知识入门
  • Lottie 动画导出为 GIF/MP4 以及与 QML 集成演示
  • 前端问题解决方法
  • 每日挠头算法题(十五)螺旋矩阵II
  • 度量方法总结
  • 基于正则化Regularized Interpolation插值算法的图像超分辨重构研究-附Matlab代码
  • Java 反射机制
  • 【CMU15-445 Part-8】Tree Indexes ii
  • JSON相关