springMVC上传图片

spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方

1.form的enctype=”multipart/form-data” 这个是上传文件必须的
2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少
注意导包: commons-fileupload-1.2.2.jar        commons-io-2.2.jar

注意:配置multipartResolver时可以添加限制,例如

	<!-- 设置上传文件最大值   10M=1*1024*1024(B)*10=1048576 bytes -->  
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
	    <property name="maxUploadSize" value="10485760" />  
	</bean>
	

一、普通表单上传代码:

上传界面代码:

 

<body>
  <center>
    <form action="user/addUser.do" method="post" enctype="multipart/form-data">
         姓名: <input type="text" name="uname"><br>
         密码: <input type="password" name="upass"><br>
         照片:<input type="file" name="upload" value="选择图片">
         <input type="submit" value="添加">
         <input type="reset" value="清空">
    </form>
  </center>
  </body>


控制器代码:

//转发地址不会变,重定向地址会变,经常使用转发,不使用重定向
    @RequestMapping("addUser")
    public ModelAndView addUser(ModelAndView mav,TblUser user,@RequestParam("upload")MultipartFile upload,HttpServletRequest request){
        //获取文件上传路径
        String path=request.getSession().getServletContext().getRealPath("upload");
        //获取文件名称
        String name=upload.getOriginalFilename();
        System.out.println(path);
       
        //创建一个目标文件夹下的目标文件
        File targetfile=new File(path, name);
       
        try {
            //文件转移到目标文件夹中
            upload.transferTo(targetfile);
            user.setPhoto("upload/"+name);
            System.out.println("上传成功");
        } catch (IllegalStateException e) {
            System.out.println("上传失败");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("上传失败");
            e.printStackTrace();
        }
       
       
        userDao.addUser(user);
        //name的值使用转发能取到,使用重定向就取不到
        mav.addObject("name", "mengfancheng");
        mav.setViewName("forward:userList.do");
        return mav;
    }


applicationContext.xml添加配置文件:
<!-- 支持上传   commons复合解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

二、SpringMVC+Ajax实现异步上传

页面代码这里可以忽略使用bootstrap的css样式:

			<form class="form-horizontal" role="form" enctype="multipart/form-data" id="fileForm">
			  <div class="form-group">
			    <label for="firstname" class="col-sm-2 control-label">收件人邮箱</label>
			    <div class="col-sm-10">
			      <input type="text" class="form-control" id="recipientEmail" name="recipientEmail" placeholder="请用英文半角 ; 分隔开多个收件人">
			    </div>
			  </div>
			  <div class="form-group">
			    <label for="lastname" class="col-sm-2 control-label">主题</label>
			    <div class="col-sm-10">
			      <input type="text" class="form-control" id="subject" name="subject" placeholder="邮件主题">
			    </div>
			  </div>
			  <div class="form-group">
			    <label for="lastname" class="col-sm-2 control-label">邮件内容</label>
			    <div class="col-sm-10">
			      <textarea class="form-control" rows="3" name="text"></textarea>
			    </div>
			  </div>
			  <div class="form-group">
			    <label for="lastname" class="col-sm-2 control-label">附件一</label>
			    <div class="col-sm-10">
			      <input type="file" id="inputfile" name="attachment">
			    </div>
			  </div>
			  <div class="form-group">
			    <label for="lastname" class="col-sm-2 control-label">附件二</label>
			    <div class="col-sm-10">
			      <input type="file" id="inputfile"  name="attachment">
			    </div>
			  </div>
			  <div class="form-group">
			    <div class="col-sm-offset-2 col-sm-10">
			      <button type="submit" class="btn btn-default" onclick="morePicUpload();">发送指定内容</button>
			    </div>
			  </div>
			</form>

Ajax上传的js代码:

	function morePicUpload(){
   		var formData = new FormData(document.getElementById("fileForm"));
	    $.ajax({
	        url : "../testEmailSendCtrl/morePicUpload.do",
	        type : "post",
	        data :formData,
	        async : false,
	        cache : false,
	       dataType : "json",
	        contentType : false,
	        processData : false,
	        success : function(data){
	           alert("发送成功!");
			   window.location.reload();
	        }
	    });
	}

Controller处理代码:

	@RequestMapping("morePicUpload")
    @ResponseBody
    public Map<String, Object> morePicUpload(HttpServletRequest request) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("flag", "false");
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        String recipientEmails = multipartRequest.getParameter("recipientEmail");
        String subject = multipartRequest.getParameter("subject");
        String text = multipartRequest.getParameter("text");
        System.out.println(recipientEmails);
        System.out.println(subject);
        System.out.println(text);
        
        List<MultipartFile> filelist = multipartRequest.getFiles("attachment");
        
        //获取文件上传路径
        String path=request.getSession().getServletContext().getRealPath("upload");
        for(MultipartFile file:filelist){
            if(!file.isEmpty()){
            	//获取文件名称
                String name=file.getOriginalFilename();
                //创建一个目标文件夹下的目标文件
                File targetfile=new File(path, name);
                try {
                	//文件转移到目标文件夹中
					file.transferTo(targetfile);
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}

            }
        }
		return map; 
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值