file文件上传总结

来源:互联网 发布:魔镜软件哪个好 编辑:程序博客网 时间:2024/05/28 06:05

1、  基本配置

1) form表单添加enctype="multipart/form-data"

<form role="form" action="javascript:void(0)"id="addImpDatasForm"name="addImpDatasForm"method="post"enctype="multipart/form-data">

知识点:enctypemultipart/form-data是专门用于文件上传的MIME格式,不会对提交数据进行编码,上传的就是原始的二进制编码,form表单默认是application/x-www-form-urlencoded的格式,不适用于文件上传,因为他会把form表中的数据进行编码。

 

2)  form表单里添加file文件类型:<input type="file"name="fileName" id="fileName">


3)  spring-mvc.xml配置文件中添加代码:<beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

    </bean>      

 

 

2、  jsp页面提交及接收

1)  form表单

<formrole="form"action="javascript:void(0)"id="addImpDatasForm"name="addImpDatasForm"method="post"enctype="multipart/form-data">

  <input type="file"name="fileName" id="fileName">

    <buttontype="button"class="btnbtn-primary"id="btn-submitImpDatas"onclick="subimtBtn();">提交</button>

</form>

 

2)      提交代码

<scripttype="text/javascript"> 

    function subimtBtn() { 

        var form = $("form[name=addImpDatasForm]"); 

        var options  = {   

            url:'${ctx}/impDataBatchCtrl/saveDataBatchInfo.do',   

            type:'post',

            data: form,

            success:function(data)   

            {   

                          }   

        };   

       form.ajaxSubmit(options); 

            } 

</script>

 

3)      ctroller接收

@RequestMapping("saveDataBatchInfo")

@ResponseBody

public String saveExcelInfo(MultipartFile fileName,@ModelAttribute ImpDataBatchQvo batchQvo,HttpServletRequestrequest,Model model){

    FileItemfileItem = ((CommonsMultipartFile) fileName).getFileItem();

       InputStreamins = null;

        if(!fileItem.isFormField() &&fileItem!=null){//判断是否为文件域

           try{

              ins =fileItem.getInputStream();

           }catch(IOException e) {

              log.error("文件流获取错误:"+e.getMessage());

              return"inputStreamErr";

           }

        //有了InputStream,就可以对上传的excel文件进行操作了

       }

}

 

 

3、  问题总结:

1)   form.ajaxSubmit is not a function

原因:没引用jquery.form.js这个插件

修改:在jsp中引入:<scriptsrc="${ctxStatic} /js/jquery-form.js"type="text/javascript"></script>

jquery-form.js包下载见:http://download.csdn.net/detail/liuguom125/9867321

 

2)  Ctroller中的MultipartFile fileName接收参数值为空

现象:

@RequestMapping("saveDataBatchInfo")

    @ResponseBody

public String saveDataBatchInfo(MultipartFile fileName,@ModelAttribute ImpDataBatchQvobatchQvo,HttpServletRequest request,Model model){

//fileName = null,应该有值

//业务逻辑

}

原因:jsp中的file的name值应该与该参数名相同。

修改:MultipartFile fileName 和file中的name值(fileName)保持一致。<inputtype="file" name="fileName" id="fileName">


3)  文件上传时对表单提交,ctroller里的方法接收不到。

原因:文件上传只能进行submit方法进行提交,不能用ajax进行提交。

修改:采用form表单形式进行提交

<scripttype="text/javascript"> 

    function subimtBtn() { 

        var form = $("form[name=addImpDatasForm]"); 

        var options  = {   

            url:'${ctx}/impDataBatchCtrl/saveDataBatchInfo.do',   

            type:'post',

            data: form,

            success:function(data)   

            {   

                          }   

        };   

       form.ajaxSubmit(options); 

            } 

</script>