AJAX 上传java后端MultipartFile接受文件,并保存。

 到处找每个人写的都不一样,很多都不适合要求,前端框架关键给我坑的一笔啊。


前端代码


JS代码

    js接收文件

    var formData = new FormData();
    formData.append("files", $("#file1")[0].files[0]);

提交后台

   $.ajax({
         type:'POST',
         url:Feng.ctxPath+"/consult/add",
         data:formData,
         contentType:false,
         processData:false,//这个很有必要,不然不行
         dataType:"json",
         mimeType:"multipart/form-data",
         success:function(data){
                if(200==data.code){
                    Feng.success("保存成功!");
                     window.parent.Consult.table.refresh();
                     ConInfoDlg.close();
                }else{
                    Feng.error("保存失败!"+data.message);
                }
            }
     });

java后台代码

public Object add(HttpServletRequest request,@RequestParam( value="files",required=false)MultipartFile multipartFile) throws IllegalStateException, IOException {//这里一定要写required=false 不然前端不传文件一定报错。到不了后台。
        String realpath="";
        //获取文件名
        String name="";
        if(multipartFile!=null){
              long size= multipartFile.getSize();
            if(size2>5242880){//文件设置大小,我这里设置5M。
                throw new KingException(BizExceptionEnum.FILE_UPLOAD_ERROR);
            }
            name=multipartFile.getOriginalFilename();//直接返回文件的名字
            String subffix = name.substring(name.lastIndexOf(".") + 1, name.length());//我这里取得文件后缀
            String fileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//文件保存进来,我给他重新命名,数据库保存有原本的名字,所以输出的时候再把他附上原本的名字就行了。
            String filepath=request.getServletContext().getRealPath("/")+"files\\";//获取项目路径到webapp
            File file=new File(filepath);
            if(!file.exists()){//目录不存在就创建
                file.mkdirs();
            }
            multipartFile.transferTo(new File(file+"\\"+fileName+"."+subffix));//保存文件
            realpath=file+"\\"+fileName+"."+subffix;
        }

你可能感兴趣的:(笔记)