js上传文件并且附带自定义信息

实现的思路用了一个保存信息的数组和一个图片的数组 保持住两者的顺序一一对应 最后提交到后台 下面贴出相关代码 供有需要的同学参考

页面:
在这里插入图片描述
代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="icon" type="image" href="images/logo-ico.png">
<link rel="apple-touch-icon-precomposed" href="images/logo-ico.png">
<title>农产品基本信息管理</title>
<link rel="stylesheet" href="/static/css/style.css">
<link rel="stylesheet" href="/static/select2/css/select2.min.css"/>
</head>
<body>
<!--  当前位置  -->
<div class="location">当前位置:危害质量安全关键点信息管理 >> <a href="list">农产品基本信息管理</a> >> 新增</div>
<div class="con-main"> 
  <!--  查询  按钮  -->
  <div class="form-box">
  <form id="formId" action="#">
  <input type="hidden" name="id" th:value="${pageData?.id}">
    <table width="100%" border="0" cellspacing="0" cellpadding="0" class="form-table">
      <tr>
        <th><span>*</span>农产品类别</th>
        <td><select name="cropscode" class="select2" onchange="getBreedCode(this.value);">
            <option selected="selected" value="">请选择</option>
            <option th:selected="${pageData?.cropscode eq cropscode.cropscode}" th:each="cropscode : ${cropscode}"
				th:value="${cropscode.cropscode}" th:text="${cropscode.cropsname}"></option>
          </select></td>
        <th><span>*</span>农产品</th>
        <td><select name="breedcode" class="select2" onchange="getVarietiesCode(this.value);">
            <option selected="selected" value="">请选择</option>
          </select></td>
        <th><span>*</span>品种</th>
        <td><select name="varietiescode" class="select2">
            <option selected="selected" value="">请选择</option>
          </select></td>
      </tr>
      <tr>
        <th><span>*</span>产品特色</th>
        <td colspan="5"><textarea name="varietiescharacteristics" cols="" rows="4" style="width:100%;" th:text="${pageData?.varietiescharacteristics}" maxlength="1000"></textarea></td>
      </tr>
      <tr>
        <th>营养价值</th>
        <td colspan="5"><textarea name="nutritivevalue" cols="" rows="2" style="width:100%;" th:text="${pageData?.nutritivevalue}" maxlength="1000"></textarea></td>
      </tr>
      <tr>
        <th>认证</th>
        <td colspan="5"><select name="authentication" class="fl" style="width:40px;" onchange="choose(this);">
            <option value="1" th:selected="${pageData?.authentication == 1}">是</option>
            <option value="0" th:selected="${pageData?.authentication == 0}">否</option>
          </select>
          <div id="authenticationdom" class="qy-upload-box" th:style="'display:' + @{(${pageData?.authentication == 0} ? 'none' : '')}">
          
            <input type="text" class="input-fixed" style="width:100%;" disabled/>
              <ul class="set-box">
              </ul>
              <div style="padding-top:3px;">
              <a class="upload add-map fr" style="margin:0;" onclick="uploaddom(0,this)">上传证书文件</a>
              </div>
              
          </div>
          </td>
      </tr>
      <tr>
        <th>获奖</th>
        <td colspan="5"><select name="awardcertificate" class="fl" style="width:40px;" onchange="choose(this);">
            <option value="1" th:selected="${pageData?.awardcertificate == 1}">是</option>
            <option value="0" th:selected="${pageData?.awardcertificate == 0}">否</option>
          </select>
          <div id="awardcertificatedom" class="qy-upload-box" th:style="'display:' + @{(${pageData?.awardcertificate == 0} ? 'none' : '')}">
              
              <input type="text" class="input-fixed" style="width:100%;" disabled/>
              <ul class="set-box">
              </ul>
              <div style="padding-top:3px;">
              <a class="upload add-map fr" style="margin:0;" onclick="uploaddom(1,this)">上传奖项照片</a>
              </div>
              
          </div></td>
      </tr>
      <tr>
        <th>检测</th>
        <td colspan="5"><select name="testreport" class="fl" style="width:40px;" onchange="choose(this);">
            <option value="1" th:selected="${pageData?.testreport == 1}">是</option>
            <option value="0" th:selected="${pageData?.testreport == 0}">否</option>
          </select>
          <div id="testreportdom" class="qy-upload-box" th:style="'display:' + @{(${pageData?.testreport == 0} ? 'none' : '')}">
              
			<input type="text" class="input-fixed" style="width:100%;" disabled/>
              <ul class="set-box">
              </ul>
              <div style="padding-top:3px;">
              <a class="upload add-map fr" style="margin:0;" onclick="uploaddom(2,this)">上传检测报告</a>
              </div>

          </div></td>
      </tr>
      <tr>
        <th>产品图集</th>
        <td colspan="5"><select name="image" class="fl" style="width:40px;" onchange="choose(this);">
            <option value="1" th:selected="${pageData?.image == 1}">有</option>
            <option value="0" th:selected="${pageData?.image == 0}">无</option>
          </select>
          <div id="imagedom" class="qy-upload-box" th:style="'display:' + @{(${pageData?.image == 0} ? 'none' : '')}">
          
          <input type="text" class="input-fixed" style="width:100%;" disabled/>
              <ul class="set-box">
              </ul>
              <div style="padding-top:3px;">
              <a class="upload add-map fr" style="margin:0;" onclick="uploaddom(3,this)">上传图片</a>
              </div>
              
          </div>
          </td>
      </tr>
      <tr>
        <th>产品视频</th>
        <td colspan="5"><select name="video" class="fl" style="width:40px;" onchange="choose(this);">
            <option value="1" th:selected="${pageData?.video == 1}">有</option>
            <option value="0" th:selected="${pageData?.video == 0}">无</option>
          </select>
          <div id="videodom" class="qy-upload-box" th:style="'display:' + @{(${pageData?.video == 0} ? 'none' : '')}">
          
              <input type="text" class="input-fixed" style="width:100%;" disabled/>
              <ul class="set-box">
              </ul>
              <div style="padding-top:3px;">
              <a class="upload add-map fr" style="margin:0;" onclick="uploaddom(4,this)">上传视频</a>
              </div>
                
              </div>
          </td>
      </tr>
    </table>
    </form>
    <div class="btn-box"><a onclick="save()">保存</a><a onclick="preview()">预览</a><a onclick="del()">删除</a><a href="list">返回</a></div>
  </div>
</div>
<!--  增加弹出  -->
<div class="pop-box" id="file_new" style="display:none;">
  <div class="title"><a class="close" onclick="file_new.style.display=(file_new.style.display='none');">×</a><span>上传文件</span></div>
  <div class="pop-con">
  <form id="file_new_form" action="#">
    <table width="100%" border="0" cellspacing="0" cellpadding="0" class="form-table">
      <tr style="display:none;" id="certificatetypetr">
        <th>证书类型:</th>
        <td><select name="certificatetype">
            <option selected="selected" value="">请选择</option>
            <option th:each="certificateType : ${certificateType}"
				th:value="${certificateType.id}" th:text="${certificateType.value}"></option>
          </select></td>
      </tr>
      <tr>
        <th><span>*</span>文件名称:</th>
        <td><input type="text" name="name"/></td>
      </tr>
      <tr>
        <th><span>*</span>文件照片:</th>
        <td><input type="file" name="file"/></td>
      </tr>
    </table>
    </form>
  </div>
  <div class="btn-box"><a onclick="filesave()">保存</a><a onclick="file_new.style.display=(file_new.style.display='none');">取消</a></div>
</div>

<!--  预览弹出  -->
<div class="pop-box" id="preview_box" style="display:none;">
<div class="pop-con"> <a class="close" onclick="preview_box.style.display=(preview_box.style.display='none');">×</a>
 <img id="preview" style="display:none;" height="350" width="600"/>
 <video id="preview_video" style="display:none;" controls="controls" height="350" width="600"></video>
 </div>
</div>

<script type="text/javascript" src="/static/js/jquery-1.11.1.min.js" ></script>
<script type="text/javascript" src="/static/select2/js/select2.min.js" ></script>

		<script th:inline="javascript">
		var typevalue = "",
			domid = "",
			filedata = [],
			filefile = [];
		
		//获取品种下拉框数据
		function getVarietiesCode(value) {
			getVarietiesCodeData(value,null);
		}
		
		//获取品种下拉框数据
		  function getVarietiesCodeData(id,value) {
				$.ajax({
					url:"getVarietiesCodeData",
					async:true,
					type:"post",
					data:{"id":id},
					success:function(data){
						if(typeof(data) == 'string'){
							data = JSON.parse(data)
						}
						if(data.code == 0) {
							var htm = "<option selected='selected' value=''>请选择</option>";
							$.each(data.data,function (index,value){
								htm += "<option selected='selected' value="+value.varietiescode+
								">"+value.varietiesname+"</option>"
							});
							$("select[name=varietiescode]").html(htm);
							$("select[name=varietiescode]").val(value);
						} else {
							parent.layer.msg(data.msg);
						}
					}
		      });
			}
		
		//获取农产品下拉框数据
		function getBreedCode(value) {
			getBreedCodeData(value,null);
		}
		
		//获取农产品下拉框数据
		  function getBreedCodeData(id,value) {
				$.ajax({
					url:"getBreedCodeData",
					async:true,
					type:"post",
					data:{"id":id},
					success:function(data){
						if(typeof(data) == 'string'){
							data = JSON.parse(data)
						}
						if(data.code == 0) {
							var htm = "<option selected='selected' value=''>请选择</option>";
							$.each(data.data,function (index,value){
								htm += "<option selected='selected' value="+value.breedcode+
								">"+value.breedname+"</option>"
							});
							$("select[name=breedcode]").html(htm);
							$("select[name=breedcode]").val(value);
						} else {
							parent.layer.msg(data.msg);
						}
					}
		      });
			}
		
		//初始化页面数据
		$(function () {
			
			$(".select2").select2({
				 language: "zh-CN",
				 language: {
				   noResults: function(params) {
				   return "无匹配项";
				 }
				}
			});
			//下拉框回显
			var pageData = [[${pageData}]];
			if(pageData.cropscode) {
				getBreedCodeData(pageData.cropscode,pageData.breedcode);
			}
			if(pageData.breedcode) {
				getVarietiesCodeData(pageData.breedcode,pageData.varietiescode);
			}

			var fileList = [[${fileList}]];
			if(fileList) {
				$.each(fileList,function (index,value){
					var domid;
					if(value.type == 0)
						domid = "authenticationdom";
					if(value.type == 1)
						domid = "awardcertificatedom";
					if(value.type == 2)
						domid = "testreportdom";
					if(value.type == 3)
						domid = "imagedom";
					if(value.type == 4)
						domid = "videodom";
					var dom = $("#"+domid);
					dom.children("input").val(dom.children("input").val()+value.name+",");
					dom.find("ul").append("<li><i><input type=checkbox inputdata="+
							value.name+" index="+value.type+" src="+
							value.imagepath+" id="+value.id+"></i>"+value.filename+"</li>");
		  		});
			}
		});
		
		//保存
		function save() {
			//效验
			if(!$("select[name=cropscode]").val()) {
				parent.layer.msg("请选择农产品类别");
				return false;
			}
			if(!$("select[name=breedcode]").val()) {
				parent.layer.msg("请选择农产品");
				return false;
			}
			if(!$("select[name=varietiescode]").val()) {
				parent.layer.msg("请选择品种");
				return false;
			}
			if(!$("textarea[name=varietiescharacteristics]").val()) {
				parent.layer.msg("请输入产品特色");
				return false;
			}
	  		var formdata = new FormData($("#formId")[0]);  //用所要提交form做参数建立一个formdata对象
			var filedatainfo = filedata.slice(0);
	  		for(var i = 0; i < filedatainfo.length; i++) {
	  		   if(filedatainfo[i] == undefined) {
	  			 filedatainfo.splice(i,1);
	  		      i--;
	  		    }
	  		   }
	  		formdata.append("filedata",JSON.stringify(filedatainfo));
	  		$.each(filefile,function (index,value){
	  			formdata.append("filefile",value);
	  		});
	  		
			$.ajax({
				url:"saveOrUpdate",
				async:true,
				type:"post",
				processData: false,   //当设置为true的时候,jquery ajax 提交的时候不会序列化 data,而是直接使用data
				data:formdata,
				contentType: false,   //jax 中 contentType 设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件
				success:function(data){
					if(typeof(data) == 'string'){
						data = JSON.parse(data)
					}
					if(data.code == 0){
						parent.layer.msg(data.msg);
						window.location.href='list';
					}else{
						parent.layer.msg(data.msg);
					}
				}
	      });
		}
		
		//删除
		function del() {
			if($("input:checkbox:checked").length == 0) {
				parent.layer.msg("请选择要删除的文件");
				return false;
			}
			$("input:checkbox:checked").each(function (index,value){
				var id = $(value).attr("value");
				var inputdata = $(value).attr("inputdata");
				var inputdom = $(value).parent().parent().parent().prev();
				inputdom.val(inputdom.val().replace(inputdata+",",""));
				//删除元素
				$(value).parent().parent().remove();

				if(id) {
					delete filedata[id];
					delete filefile[id];
				} else {
					fileDel($(value).attr("id"));
				}

			});
		}
		
		//文件删除
		function fileDel(id) {
			$.ajax({
				url:"fileDel",
				async:true,
				type:"post",
				//processData: false,   //当设置为true的时候,jquery ajax 提交的时候不会序列化 data,而是直接使用data
				data:{id:id},
				//contentType: false,   //jax 中 contentType 设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件
				success:function(data){
					if(typeof(data) == 'string'){
						data = JSON.parse(data)
					}
					if(data.code == 0){
						parent.layer.msg(data.msg);
					}else{
						parent.layer.msg(data.msg);
					}
				}
	      });
		}
		
		//预览
		function preview() {

			if($("input:checkbox:checked").length != 1) {
				parent.layer.msg("请选择一个文件预览");
				return false;
			}
			var index = $($("input:checkbox:checked")[0]).attr("value");

			if(index) {
			if(filedata[index].type == 4) {
				$("#preview").hide();
				$("#preview_video").show();
				$("#preview_video").attr("src",URL.createObjectURL(filefile[index]));
			} else {
				$("#preview_video").hide();
				$("#preview").show();
				$("#preview").attr("src",URL.createObjectURL(filefile[index]));
			}
			} else {
				var index = $($("input:checkbox:checked")[0]).attr("index");
				var src = $($("input:checkbox:checked")[0]).attr("src");

				if(index == 4) {
					$("#preview").hide();
					$("#preview_video").show();
					$("#preview_video").attr("src","/file/"+src);
				} else {
					$("#preview_video").hide();
					$("#preview").show();
					$("#preview").attr("src","/file/"+src);
				}
			}
			
			$("#preview_box").show();
		}
		
		//上传文件格式效验
		$("input[name=file]").change(function () {
		var img = $("input[name=file]").val();

		//校验格式
		var idx = img.lastIndexOf(".");
		var lastName = img.substring(idx,img.length);
		var name = lastName.toLowerCase();
		var size = $(this)[0].files[0].size;
		
		if(typevalue == 4) {
			if(name != ".mp4" && name != ".rmvb" && name != ".avi") {
				parent.layer.msg("视频格式不支持,请选择mp4/rmvb/avi格式的视频");
				$("input[name=file]").val("");
				return false;
			}
			//视频大小限制5M 
			var maxSize = 1024 * 1024 * 5;
			if(size > maxSize){
				parent.layer.msg("上传失败,请选择5MB以内的视频上传");
				$("input[name=file]").val("");
				return false;
			}
		} else {
			if(name != ".jpg" && name != ".jpeg" && name != ".png") {
				parent.layer.msg("图片格式不支持,请选择jpg/jpeg/png格式的图片");
				$("input[name=file]").val("");
				return false;
			}
			//图片大小限制1M 
			var maxSize = 1024 * 1024;
			if(size > maxSize){
				parent.layer.msg("上传失败,请选择1MB以内的图片上传");
				$("input[name=file]").val("");
				return false;
			}
		}

		});
		
		//上传文件弹出层
		function uploaddom(type,sel) {
			//视频效验 只允许上传一个视频
			if(type == 4) {
				if($(sel).parent().prev().find("li").length > 0) {
					parent.layer.msg("仅允许上传一个视频");
					return false;
				}
			}
			
			domid = $(sel).parent().parent().attr("id");
			typevalue = type;
			$("#file_new_form")[0].reset();
			if(type == 0) {
				$("#certificatetypetr").show();
			} else {
				$("#certificatetypetr").hide();
			}
				
			$("#file_new").show();
		}
		
		//弹出层保存
		function filesave() {
			
			if(!$("input[name=name]").val()) {
				parent.layer.msg("请填写文件名称");
				return false;
			}	
			if(!$("input[name=file]").val()) {
				parent.layer.msg("请选择照片文件");
				return false;
			}
			//组装数据
			filedata.push({
				name:$("input[name=name]").val(),
				type:typevalue,
				certificatetype:$("select[name=certificatetype]").val()
			});
			filefile.push($("input[name=file]")[0].files[0]);

			var dom = $("#"+domid);
			dom.children("input").val(dom.children("input").val()+$("input[name=name]").val()+",");
			dom.find("ul").append("<li><i><input type=checkbox value="+(filedata.length-1)+" inputdata="+$("input[name=name]").val()+"></i>"+$("input[name=file]")[0].files[0].name+"</li>");

			$("#file_new").hide();
		}
		
		//控制是否显示上传按钮
		function choose(sel){
			var seldom = $(sel);
			var domid = seldom.next().attr("id");

			if(seldom.val() == "1") {
				$("#"+domid).show();
			} else {
				$("#"+domid).hide();
			}
			
			//如果有上传文件清空
			$("#"+domid).find("ul").find("input").each(function (index,value){
				var id = $(value).attr("value");
				if(id) {
					delete filedata[id];
					delete filefile[id];
				} else {
					fileDel($(value).attr("id"));
				}
			});
			//最后清除元素内容
			$("#"+domid).find("input").val("");
			$("#"+domid).find("ul").html("");
		};
		
</script>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值