Spring MVC实现文件上传

依赖jar包:

commons-io

commons-fileupload

commons-lang


Spring MVC配置文件中配置MultipartResolver:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	
	<!-- 配置MultipartResolver,用于上传文件,使用Spring的CommonsMultipartResolver -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxInMemorySize" value="5000000"></property><!-- 文件上传大小,字节为单位 -->
		<property name="defaultEncoding" value="UTF-8"></property><!-- 请求的编码格式,需与jsp的pageEncoding一致 -->
	</bean>
</beans>

前端form表单添加enctype="multipart/form-data"

页面添加:

 </div>
                       <div>
                	<input type="hidden" id="errorinfo_lic" value="${uploadlicError }"/>
                	<label for="companyLicPicPath">企业营业执照存储路径</label>
                	<input type="file" name="attachs" id="companyLicPicPath"/>
                	<font color="red"></font>
                </div>
                <div>
                	<input type="hidden" id="errorinfo_Code" value="${uploadCodeError }"/>
                	<label for="orgCodePicPath">组织机构代码证照片</label>
                	<input type="file" name="attachs" id="orgCodePicPath"/>
                	<font color="red"></font>
                </div>

控制器:

	/**
	 * 保存供应商信息
	 * 
	 * @param provider
	 * @param session
	 * @return
	 * 文件上传流程:Spring MVC会将上传文件绑定到MultipartFile对象中,MultipartFile提供了获取上传文件内容、文件名等
	 * 最后通过其transferTo()方法将文件存储到服务器上
	 */
	
	@RequestMapping("addProviderSave")
	public String addProviderSave(
			Provider provider,
			HttpSession session,
			HttpServletRequest request,//MultipartFile对象作为控制器处理方法的入参,数组必须加@RequestParam注解
			@RequestParam(value = "attachs", required = false) MultipartFile[] attachs) {
		String companyLicPicPath = null;//
		String orgCodePicPath = null;
		String errorinfo = null;
		boolean flag = true;
		String path = request.getSession().getServletContext()//文件上传的目标路径(服务器),File.separator自适应路径分隔符
				.getRealPath("statics" + File.separator + "uploadFiles");
		for (int i = 0; i < attachs.length; i++) {
			MultipartFile attach = attachs[i];
			if (!attach.isEmpty()) {//判断是否有文件上传
				if (i == 0) {//数组里的文件对象是按照是按照form表单的file标签顺序进行存储的
					errorinfo = "uploadlicError";
				} else if (i == 1) {
					errorinfo = "uploadcodeError";
				}
				String oldFileName = attach.getOriginalFilename();// 原文件名
				String prefix = FilenameUtils.getExtension(oldFileName);// 后缀
				int fileSize = 500000;
				if (attach.getSize() > fileSize) {
					request.setAttribute(errorinfo, "上传大小不得超过500KB");
					flag = false;
				} else if (prefix.equalsIgnoreCase("jpg")
						|| prefix.equalsIgnoreCase("png")
						|| prefix.equalsIgnoreCase("jpeg")
						|| prefix.equalsIgnoreCase("pneg")) {
					//当前系统时间+随机数+_personal.jpg,保证不会重复
					String fileName=System.currentTimeMillis()+RandomUtils.nextInt(0,1000000)+"_personal.jpg";
					File targetFile=new File(path,fileName);
					if(!targetFile.exists()){
						targetFile.mkdirs();
					}
					//保存
					try {
						attach.transferTo(targetFile);//把MultipartFile中文件流的数据输出至目标文件夹
					} catch (IllegalStateException e) {
						e.printStackTrace();
						request.setAttribute(errorinfo, "上传失败");
						flag=false;
					} catch (IOException e) {
						e.printStackTrace();
					}
					if(i==0){
						companyLicPicPath=fileName;//数据库中存储文件名
					}else if(i==1){
						orgCodePicPath=fileName;
					}
				}else {
					request.setAttribute(errorinfo, "上传图片格式不正确");
					flag=false;
				}
			}
		}
		if (flag) {
			provider.setCreatedBy(((User) session
					.getAttribute(Constants.USER_SESSION)).getId());
			provider.setCreationDate(new Date());
			provider.setCompanyLicPicPath(companyLicPicPath);
			provider.setOrgCodePicPath(orgCodePicPath);
			try {
				if (providerService.addProvider(provider) > 0) {
					return "redirect:/providerController/providerList";
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return "provideradd";
	}


添加js,优化用户体验:

var companyLicPicPath=null;
var orgCodePicPath=null;
var errorinfo_lic=null;
var errorinfo_Code=null;
$(function(){
	companyLicPicPath=$("#companyLicPicPath");
	orgCodePicPath=$("#orgCodePicPath");
	errorinfo_lic=$("#errorinfo_lic");
	errorinfo_Code=$("#errorinfo_Code");
	if(errorinfo_lic.val()==null||errorinfo_lic.val()==""){
		companyLicPicPath.next().html("*上传文件类型必须是jpg、jpeg、png、pneg*");
	}else{
		companyLicPicPath.next().html(errorinfo_lic.val());
	}
	if(errorinfo_Code.val()==null||errorinfo_Code.val()==""){
		orgCodePicPath.next().html("*上传文件类型必须是jpg、jpeg、png、pneg*");
	}else{
		orgCodePicPath.next().html(errorinfo_Code.val());
	}
});



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值