带图片上传的,多行表单记录提交

本文详细介绍了从用户界面到后台处理的订单提交流程,包括表单数据的收集、JSON数据的生成与提交,以及后台的数据验证、图片上传和订单状态处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图

 

前台页面代码:

<form target="form" id="myform" action="<%=basePath%>wxorder/submit" method="post" enctype="multipart/form-data">
		<div class="order-addr chose">
			<div class="order-addr-user">${name }<span class="addr-tel">${phone }</span>
			</div>
			<a href="javascript:;" class="order-addr-user">${addr }</a>
		</div>
		<input type="hidden" name="addr" id="addr" value="${name },${phone },${addr }">
		<input type="hidden" name="proInfo" id="jsonArray">
		<input type="hidden" name="orderNum" value="${orderNum }">
		<input type="hidden" name="userId" value="${userId }">
		<div class="order-detail">
			<h5 >订单号:${orderNum } </h5>
			<!-- <div class="weui_panel_bd">
            		<a href="javascript:void(0);" class="weui_media_box weui_media_appmsg">
                	<div class="weui_media_bd">
                    <h4 class="weui_media_title">吕家传</h4>
                    <p class="weui_media_desc">被信任是一种责任</p>
                </div> -->
			<!-- <input type="hidden" name="goods_id" id="goods_id" value="25">
			</a>
			<div class="order-num">
				产品1 价格:888
				<div class="goods-num">
					<input type="number" min="1" value="5" style="width: 0.7rem"> 盒
				</div>
			</div> -->
			<div id='product' >
				
			</div>
			<div class="order-remarks">
				<input id="zongjia1" type="hidden" name="totalPrice">
			<!-- <input type="text" onchange="console.log(this.value);" />  -->
				总价:<input id="zongjia" type="text" class="input-remark"  readonly="readonly" value="" >
			</div>
			<div class="order-remarks" style="text-align: center;" onclick = "selectPro();">
				<a href="javascript:;" class="a-upload">
					<input type="button" value="添加产品"  >添加产品
				</a>
			</div>
			<div class="order-remarks">
				备注信息 <input type="text" name="remark1" placeholder="请输入备注信息" class="input-remark">
			</div>
			<div class="order-remarks" style="line-height:28px">
			
				支付截图 <a href="javascript:;" style="float: right" id="filea" class="a-upload"> <input type="file"
					 name="file" id="" onchange="changeFile(this.value)">点击这里上传文件
				</a>
				<div style="clear:both"></div>
			</div>
			
			<div class="order-remarks">
				截图名称:<input  type="text" class="input-remark" readonly="readonly" id="tupian">
			</div>
		</div>
		</form>
		<iframe name="form" id="form" style="display: none"></iframe>

js代码

(function($){
        $.fn.serializeJson = function(){
            var jsonData1 = {};
            var serializeArray = this.serializeArray();
            // 先转换成{"id": ["12","14"], "name": ["aaa","bbb"], "pwd":["pwd1","pwd2"]}这种形式
            $(serializeArray).each(function () {
                if (jsonData1[this.name]) {
                    if ($.isArray(jsonData1[this.name])) {
                        jsonData1[this.name].push(this.value);
                    } else {
                        jsonData1[this.name] = [jsonData1[this.name], this.value];
                    }
                } else {
                    jsonData1[this.name] = this.value;
                }
            });
            // 再转成[{"id": "12", "name": "aaa", "pwd":"pwd1"},{"id": "14", "name": "bb", "pwd":"pwd2"}]的形式
            var vCount = 0;
            // 计算json内部的数组最大长度
            for(var item in jsonData1){
                var tmp = $.isArray(jsonData1[item]) ? jsonData1[item].length : 1;
                vCount = (tmp > vCount) ? tmp : vCount;
            }

            if(vCount > 1) {
                var jsonData2 = new Array();
                for(var i = 0; i < vCount; i++){
                    var jsonObj = {};
                    for(var item in jsonData1) {
                        jsonObj[item] = jsonData1[item][i];
                    }
                    jsonData2.push(jsonObj);
                }
                return JSON.stringify(jsonData2);
            }else{
                return "[" + JSON.stringify(jsonData1) + "]";
            }
        };
    })(jQuery);


$("#btn_submit").on('click', function() {
				if($("#tupian").val()=='' || null == $("#tupian").val()){
					layer.open({
					    content: '请上传支付截图'
					    ,btn: '我知道了'
					  });
					return;
				}else if(!/.(gif|jpg|jpeg|png|gif|jpg|png)$/.test($("#tupian").val())){
		            alert("图片类型必须是.gif,jpeg,jpg,png中的一种");
		            return;
		        }
				var jsonStr = $("#myform").serializeJson();
				$("#jsonArray").val(jsonStr);
				$("#myform").submit();
				$("#form").load(function(){

					      var text = $(this).contents().find("body").text();      //获取到的是json的字符串

					     var j = $.parseJSON(text);                                         //json字符串转换成json对象

					     if(j.status == '1'){
						
						layer.open({
							  content: '成功',
							  btn: '我知道了',
							  shadeClose: false,
							  yes: function(){
								 window.location.href=window.location.href;
							  }
							});
						
					}else if(j.status == '0'){
						layer.open({
						    content: '失败'
						    ,btn: '我知道了'
						  });
					}else if(j.status == '3'){
						layer.open({
						    content: '订单号重复,请刷新页面'
						    ,btn: '我知道了'
						  });
					}else{
						layer.open({
						    content: '请填写大于0的整数'
						    ,btn: '我知道了'
						  });
					}

					})

			})
		});

后台接收:

@RequestMapping(value = "/submit")
	@ResponseBody
	public String submitUserList_4(HttpServletRequest request,String totalPrice, String orderNum, String addr,
			String remark1, String userId, String proInfo,
			@RequestParam(value = "file", required = false) MultipartFile file) {
		StanicOrder stanicOrder = new StanicOrder();
		JSONObject jsonObject = new JSONObject();
		try {
			//查询有无重复订单号,有则不能新增
			String chongfuNum = orderMapper.selectByOrderNum(orderNum);
			
			if (orderNum.equals(chongfuNum)) {
				jsonObject.put("status", 3);
				return jsonObject.toJSONString();
			}
			String realpath = request.getRealPath("/");// 获取项目动态绝对路径
														// D:\apache-tomcat-8.0.33\apache-tomcat-8.0.33\webapps\csywx\
			realpath = realpath.substring(0, realpath.lastIndexOf("\\"));
			realpath = realpath.substring(0, realpath.lastIndexOf("\\"));

			List<ProInfo> list = JSONObject.parseArray(proInfo, ProInfo.class);
			for(ProInfo pi:list) {
				if (!isPureDigital(pi.getNumber()) || Integer.valueOf(pi.getNumber()) == 0) {
					jsonObject.put("status", 2);
					return jsonObject.toJSONString();
				}
			}
			//获取发货方
			String fahuo = orderMapper.selectFahuo(userId);
			stanicOrder.setSendAgencyid(fahuo);
			stanicOrder.setId(GjUtil.getUUid());
			stanicOrder.setOrdernum(orderNum);
			stanicOrder.setReciveAddr(addr);
			stanicOrder.setRemark1(remark1);
			stanicOrder.setCrtdate(new Date());
			stanicOrder.setCrtuserid(userId);
			stanicOrder.setPrice(Double.valueOf(totalPrice));
			stanicOrder.setReciveAgencyid(stanicUserMapper.selectByPrimaryKey(userId).getAgencyid());
			String url1 = "";
			if (null != file && !"".equals(file.getOriginalFilename())) {
				// 物理路径(跟项目平级)

				String filename1 = file.getOriginalFilename();
				String prefix1 = filename1.substring(filename1.lastIndexOf(".") + 1).toUpperCase();
				String reString1 = yanzheng(file, prefix1);
				if (!"".equals(reString1)) {
					return reString1;
				}
				// 保存图片信息
				url1 = "picture/" + GjUtil.getUUid() + "." + prefix1;
				stanicOrder.setPayPicture(url1);

			}
			
			orderService.save(list,userId,stanicOrder);
			
			if (null != file && !"".equals(file.getOriginalFilename())) {
				FileUtils.writeByteArrayToFile(new File(realpath + "/" + url1), file.getBytes());
			}
			jsonObject.put("status", "1");
		} catch (IOException e) {
			log.info(e.getMessage());
			e.printStackTrace();
			jsonObject.put("status", "0");
		}
		return jsonObject.toJSONString();

	}

	/**
	 * 验证图片
	 * 
	 * @param file
	 * @param prefix
	 * @return
	 */
	private String yanzheng(MultipartFile file, String prefix) {
		String msg = "";
		if (prefix.equals("BMP") || prefix.equals("PNG") || prefix.equals("GIF") || prefix.equals("JPG")
				|| prefix.equals("JPEG")) {
		} else {
			msg = "picture";
			return msg;
		} /*
			 * if (file.getSize() > 2097152) { msg = "big"; return msg; }
			 */
		return msg;
	}
	/**
	 * 判断字符串是否为正整数
	 * @param string
	 * @return
	 */
	public static boolean isPureDigital(String string) {
        if (StringUtils.isBlank(string))
            return false;
        String regEx1 = "\\d+";
        Pattern p;
        Matcher m;
        p = Pattern.compile(regEx1);
        m = p.matcher(string);
        if (m.matches())
            return true;
        else
            return false;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值