将form表单提交文件修改为ajax提交


欢迎大家加入CSDN开发云
CSDN开发云

好久没有记录工作中的出现的问题了,不过最近客户提出了新的需求,正好弥补了一下我的短板,学到了新的知识。

周一接到客户电话,要求完善上周写的某个功能–就是同时上传多个图片,并通过接口程序传到第三方系统。上周的修改由于是同事告诉我的需求,并不是很明确,所以需要重新修改一下。

客户提的需求是,将原来后台生成的文件直接传到第三方的功能修改为页面上传文件(图片或PDF),所以需要修改的地方比较多;例如,将原来后台生成PDF的功能代码去掉,在页面添加上传文件的代码,js 中增加上传文件的判断等等。今天主要说的就是在融合代码时,将原来的form表单提交文件修改为ajax提交后台数据的方式。代码如下:

前端jsp:

<form name="downloadForm" id="downloadForm" action="" method="post"  target="_self"  enctype="multipart/form-data" >

<div>

     <jsp:include page="../csrf.jsp"/>

           <input type="file" style="font-size:14px;color:inherit;"size="30" class="input1 js-upload" name="myfiles"  id="myfiles" multiple="multiple" contenteditable="false" onChange="checkFile(this,'file')" />

            <font id="imgStyle">(请上传格式为"jpg,png,pdf"的附件,文件大小不得超过10MB)</font>

            <br />

            <!-- <input   type="button" class="button2" value= "上传定标审批表"  id="uploading"  onclick="uploadRecord()"/> -->

            <div class="confirmOaBox" style="padding:30px;">

                 <input name="submitExamine" type="button" id="button_a" value="" class="button2" onclick="提交的方法();"/>

           </div>

</div> 

</form> 

从上边代码可以看出将原来的form表单改成了普通提交方式。

js代码:

//验证上传的图片文件格式 2020-10-11
function checkFile(obj,type){
    var fileStyle=obj.value.substring(obj.value.lastIndexOf(".")+1);
    if(type == 'file'){
            if(fileStyle !='jpg' && fileStyle != 'png' &&fileStyle!='pdf'){
                scscms_alert("请上传格式为'jpg,png,pdf'的文件",'warn');
                $("#myfiles").val("");
            }
        }
    //获取文件大小
    var fileSize = obj.files[0].size
     if(fileSize>10000*1024){
        scscms_alert("请上传小于10M的文件",'warn');
        $("#myfiles").val("");
    } 
}

以上代码为验证上传文件的方法

提交方法的代码:
var myfiles = $("input[name='myfiles']").val();
    if(myfiles ==null || myfiles == ''){
        scscms_alert("请先上传******文件!",'warn');
        return false;
    }

var form = new FormData();

    //获取需要传到后台的文件
    var files = document.querySelector('.js-upload').files
    var num = files.length
    for (var i = 0; i<num; i++) {
        form.append("file", files[i], files[i].name); // 文件对象
    };
    //需要提交到后台的其他数据
    //form.append('multilevelExamine',2);
    //form.append('evaluaOpinion',evaluaOpinion);
    //form.append('CSRFToken',"");
    scscms_alert('提交后数据不可修改,确定提交吗?','confirm',function(){
        $('#RotatingLoading').show();
        //保存数据
        $.ajax({
              type: "POST",
              url: 后台地址,
              data:form,
              cache: false, // 不缓存
              processData: false, // jQuery不要去处理发送的数据
              contentType: false, // jQuery不要去设置Content-Type请求头
              dataType:'json',
              success: function(msg){
                  if(msg.result==1){
                      scscms_alert('提交成功!','success',function(){
                          location.reload();
                      });    
                  }else{
                      scscms_alert('操作失败!'+msg.resultTxt,'warn',function(){
                      });    
                  }
               }
        })
    },function(){
        $('#RotatingLoading').hide();
        console.log('取消')
    });

以上是ajax提交后台的代码

后台代码:

@ResponseBody
    @RequestMapping(value = "")
    public void updateMultilevelExamineOA(@RequestParam("file") MultipartFile[] myfiles,String evaluaOpinion,
            HttpServletRequest request, RedirectAttributes attr, HttpSession session, HttpServletResponse response)
                    throws Exception {
        中间内容照常,业务代码,与本次修改无关。
}

以上就是form表单上传文件修改为ajax方式上传文件的改造代码,主要是为了迎合业务上的需求,同时满足与当前代码的高度融合。中间出现问题的地方没有时间截图,可以直接使用上述代码一次成功。

需要注意的是:提交方法的代码中form.append(“file”, files[i], files[i].name)和后台代码中@RequestParam(“file”) MultipartFile[] myfiles,两处标红的的属性名必须是一样的,否则会报错!这个问题本来一次能成功的我耽误了挺长时间才找到的原因。
最后感谢公司前端的同事帮忙一起处理的这个问题,这个项目不是前后端分离的,友情协助!

欢迎大家加入CSDN开发云
CSDN开发云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值