springMVC fromdata表单上传文件+ajax ajaxSetup loading效果

基于form表单的文件上传

1:基本环境配置

首先导入jar包:

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>


然后在Springmvc.xml 里添加


		<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"/>
		<!-- 指定所上传文件的总大小不能超过10M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
		<property name="maxUploadSize" value="10240000"/>
	</bean>
	
	<!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
	<!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
	<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/500.jsp页面 -->
				<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">500</prop>
			</props>
		</property>
	</bean>

2:前端页面部分
				<form:form id="inputForm" modelAttribute="breUploadBlazeFile" 
								method="post" class="form-horizontal" enctype="multipart/form-data">
					<div class="control-group">
						<label class="control-label" >产品类型:</label> 
						<div class="controls">
							<select id="type" style="width: 160px;">
								<c:forEach items="${blazeDic}" var="blaze">
									<option value="${blaze.key}" >${blaze.value}</option>
								</c:forEach>
							</select>
						</div>
					</div>
					<div class="control-group">
						<label  class="control-label" for="inputfile">包文件:</label> 
						<input type="file" id="inputfile" name="inputfile">
					</div>

					<div class="control-group">
						<label class="control-label"  for="name" >包描述:</label>
						<textarea id="decr" class="form-control" rows="3" name="decr" ></textarea>
					</div>
					<div id="Box-a">
						<button id="btnSubmit" type="button" class="btn btn-info">上传</button>
					</div>
					</form:form>


 
 
jsp的foreach遍历可以去掉改成普通的下来框就可以

关键的前端代码 因为不是很擅长前端 这部分感觉比较重要

enctype="multipart/form-data"
这句是关键 
3:js代码部分 
 ajaxSetup用来设置 Ajax全局加载框(Loading效果)配置
参考:http://www.jb51.net/article/89197.htm
loading效果引用的layui
 
 
        $(document).ready(function () {
            $(function () {
            	$.ajaxSetup({
            		layerIndex:-1,
            		beforeSend: function () {
            			this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] });
            		},
            	complete: function () {
            			layer.close(this.layerIndex);
            		},
           	 	error: function () {
            		layer.alert('部分数据加载失败,可能会导致页面显示异常,请刷新后重试', {
            			skin: 'layui-layer-molv'
            			, closeBtn: 0
            			, shift: 4 //动画类型
            				});
            			}
            		});
            	});
            
               $("#btnSubmit").click(function () {
                var type = $("#type").val();
                var decr = $("#decr").val();
                var file = $("#inputfile").val();
                var length = decr.length;
                
                var form = new FormData(document.getElementById("inputForm"));
                var oImg = $("#inputfile").get(0).files[0];
                form.append('file',oImg);
                form.append('type',type);
                
                $.ajax({
                	type: "post",
                    url: "${ctx}/upload/package",
                    data: form,
                    processData:false,
                    contentType:false,
                    dataType: "json",
                    success: function (data) {
                        if ("success" == data) {
                        	 window.opener.location.reload()
                        	 window.close();  
                        } else if ("error" == data) {
                            alertx("服务器异常!");
                        } else{
                        	alertx(data);
                        }
                    }
                });
            });   

        });


 
 
 
 

扫描二维码关注公众号,回复: 3767891 查看本文章
 
 
jquery的FormData这里是处理整个表单上传的核心所在
4:后端controller接收处理

@OperationLog(description = "上传文件")//自定义操作日志注解(去掉即可)

	@RequestMapping(value = "package", method = { RequestMethod.POST })
	@ResponseBody
	public String uploadPackage(String type, String status, String decr,
			@RequestParam(value = "file", required = true) MultipartFile file, HttpServletRequest request) {


		Long startTime = System.currentTimeMillis();


		if (file == null || file.isEmpty()) {
			logger.error("上传文件接口,上传文件内容为空。上传文件参数type={},status={},decr={}", type, status, decr);
			return "error";
		}


		// 原始名称
		String originalFilename = file.getOriginalFilename();
		logger.debug("上传文件接口,上传文件参数type={},status={},decr={},文件名称={}", type, status, decr, originalFilename);


		try {
			String creater = new UserBasicInfo(request).getUserName();
			blazeFileHandleService.uploadBlazeFile(type, status, originalFilename, decr, creater, null,
					file.getBytes());
			logger.info("上传文件接口,上传文件成功。参数type={},status={},decr={},文件名称={},创建人={}", type, status, decr,
					originalFilename, creater);
		} catch (ServiceException se) {
			logger.error("上传文件接口,业务异常信息=" + se.getMessage(), se);
			return se.getMsg();
		} catch (Exception e) {
			logger.error("上传文件接口,异常信息=" + e.getMessage(), e);
			return "error";
		}


		logger.info("[uploadPackage]上传策略文件耗时(毫秒)=" + (System.currentTimeMillis() - startTime));
		return "success";
	}
好啦 一个简单的上传就完成了 比较简陋 

 
 
 

猜你喜欢

转载自blog.csdn.net/Sacred_Relic/article/details/70066776