layer提交图片与form表单同时提交数据

前端页面

    <button type="button" name="url" class="layui-btn" id="test1">上传图片</button>
    <img class="layui-upload-img" id="photo" width="50" height="50">//点击上传图片选择图片后在这里展示
    <p id="demoText"></p>//提交图片出错后,重新提交绑定在这里

layui图片上传方法
http://www.layui.com/doc/modules/upload.html 方法参考全部参数介绍

layui.use('upload', function(){
          var $ = layui.jquery
          ,upload = layui.upload;
          //普通图片上传
          var uploadInst = upload.render({
             elem: '#test1'     /*根据绑定id,打开本地图片*/
            ,url: '${ctx}/origin/user/saveOrUpdate'  /*上传后台接受接口*/
            ,auto: false        /*true为选中图片直接提交,false为不提交根据bindAction属性上的id提交*/
            ,bindAction: '#formSubmit'   /*提交图片*/
            ,choose:function(obj){
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                  $('#photo').attr('src', result); //图片链接(base64)
                });
              }
            ,done: function(res){
              //如果上传失败
              if(res.code > 0){
                return layer.msg('上传失败');
              }
              //上传成功
            }
            ,error: function(){
              //演示失败状态,并实现重传
              var demoText = $('#demoText');
              demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
              demoText.find('.demo-reload').on('click', function(){
                uploadInst.upload();
              });
            }
          });
    }); 

form表单中的数据提交(因为图片提交在form表单中存在所以from表单的ajax提交(data : $(‘#businessForm’).serialize(),序列化 )方法会失败),需要通过formData 方法进行数据组装,另一种方法为formData.append(“username”, “Groucho”);

/*数据新增方法*/
    function save() {
        var fd = new FormData();
        var formData = new FormData($( "#signupForm" )[0]);
        $.ajax({
            cache : true,
            type : "post",
            url : "${ctx}/origin/user/saveOrUpdate",
            /* data : $('#signupForm').serialize(), */ // 你的formid
            data : formData,  // 你的formid
            async : false,
            contentType: false,   //jax 中 contentType 设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件
            processData: false,   //当设置为true的时候,jquery ajax 提交的时候不会序列化 data,而是直接使用data
            error : function(request) {
                parent.layer.alert("网络超时");
            },
            success : function(data) {
                if (data.code == 0) {
                    parent.layer.msg("操作成功");
                    parent.reLoad();
                    //注意这两句
                    var index = parent.layer.getFrameIndex(window.name);///先得到当前iframe层的索引
                    parent.layer.close(index);再执行关闭,保存、修改页面完成时要获取当前页面并关闭回到上级页面(list页面)起到刷新返回功能
                } else {
                    parent.layer.alert(data.msg)
                }
            }
        });
    }

后台接受(前段图片上传、form表单数据提交会访问两次此接口,有一次访问中form表单数据为空/user中的数据为空 。注意判断)

//@RequestParam(required=false)MultipartFile file 表示图片接受可为空
@ResponseBody
@RequestMapping (value="/saveOrUpdate")
public Msg saveOrUpdate (@RequestParam(required=false)MultipartFile file, User user,HttpServletRequest request){
        try {
        //获取项目绝对路径,从例如:(D:\eclipse\workspaceproduct3\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\origin-web\static\abc)
            String path = request.getSession().getServletContext().getRealPath("static/abc");
            String pathPhoto = "/static/abc";
            if(!file.isEmpty()){
            String name = file.getOriginalFilename();//获取接受到的图片名称
            File fi = new File(path,name);       //将path路径与图片名称联系在一起
                if(!fi.getParentFile().exists()){    //判断是否存在path路径下的文件夹
                fi.getParentFile().mkdirs();       //不存在创建path路径下的文件夹
            }
            file.transferTo(fi);                        //上传图片
            user.setPhoto(pathPhoto+"/"+name);   //为保存图片路径
        }
         if(!StringUtil.isEmpty(user.getLoginname()) && !StringUtil.isEmpty(user.getPassword())){
            userService.saveOrUpdate(user);
         }
    } catch (Exception e) {
        e.printStackTrace();
        return Msg.error();
    }
    return Msg.ok();
}
    request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了.
    getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径。
    如:D:\apachetomcat6.0.32\webapps\cloudOABaseV4\hwtt_upload
>
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值