当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

SpringMVC入门 (六) 文件上传

发表于: 2013-12-08   作者:alleni123   来源:转载   浏览次数:
摘要: 1.单个文件上传 在Controller的add方法中加入: @RequestMapping(value="/add",method=RequestMethod.POST) public String add(@Validated User user, BindingResult result, MultipartFile attach){
1.单个文件上传

在Controller的add方法中加入:
@RequestMapping(value="/add",method=RequestMethod.POST)
	public String add(@Validated User user, BindingResult result, MultipartFile attach){   
		
		String realpath=req.getSession().getServletContext().getRealPath("/resources/upload");
		File f=new File(realpath+"/"+attach.getOriginalFilename());
		try {
			FileUtils.copyInputStreamToFile(attach.getInputStream(),f );
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
		users.put(user.getUsername(), user);
		return "redirect:/user/users";  
	}


这里的MultipartFile就包含了上传文件的内容信息。

在add.jsp页面中加入文件上传
  <body>
   	
   	<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
   		用户名称:<sf:input path="username"/><sf:errors path="username"/><br/>
   		用户密码: <sf:input path="password"/><sf:errors path="password"/><br/>
   		用户昵称: <sf:input path="nickname"/> <br/>
   		用户邮箱: <sf:input path="email"/><sf:errors path="email"/><br/>
   		附件:<input type="file" name="attach"/><br/>
   		 <input type="submit" value="添加用户"/>
   	</sf:form>
   	
  </body>


这里直接上传文件会报错:
Expected MultipartHttpServletRequest: is a MultipartResolver configured?

因此我们需要在hello-servlet.xml中配置这个文件解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>


这里还没完, 打开CommonsMultipartResolver,可以看到

/**
	 * Initialize the underlying {@code org.apache.commons.fileupload.servlet.ServletFileUpload}
	 * instance. Can be overridden to use a custom subclass, e.g. for testing purposes.
	 * @param fileItemFactory the Commons FileItemFactory to use
	 * @return the new ServletFileUpload instance
	 */
	@Override
	protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {
		return new ServletFileUpload(fileItemFactory);
	}

这里引用了commons-fileupload里面的类,因此我们还要导入commons-fileupload
<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3</version>
		</dependency>	






2.多个文件上传
文件上传的时候,首先要在add.jsp中加入多个file。
注意这里把attach改成了attachs
  <body>
   	
   	<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
   		用户名称:<sf:input path="username"/><sf:errors path="username"/><br/>
   		用户密码: <sf:input path="password"/><sf:errors path="password"/><br/>
   		用户昵称: <sf:input path="nickname"/> <br/>
   		用户邮箱: <sf:input path="email"/><sf:errors path="email"/><br/>
   		附件:<input type="file" name="attachs"/><br/>
   		附件:<input type="file" name="attachs"/><br/>
   		附件:<input type="file" name="attachs"/><br/>
   		 <input type="submit" value="添加用户"/>
   	</sf:form>
   	
  </body>

接下来修改Controller里的add方法:
@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String add(@Validated User user, BindingResult result,
			@RequestParam("attachs") MultipartFile[] attachs, HttpServletRequest req) { 
		for (MultipartFile attach : attachs) {
			String realpath = req.getSession().getServletContext()
					.getRealPath("/resources/upload");
			File f = new File(realpath + "/" + attach.getOriginalFilename());
			try {
				FileUtils.copyInputStreamToFile(attach.getInputStream(), f);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		users.put(user.getUsername(), user);
		return "redirect:/user/users"; 
	}

这里做了两个改动,一个是把MultipartFile attach改成了
MultipartFile[] attachs,
另一个是在前面加入了 @RequestParam("attachs");这个注释可以将前台的parameter的名称和这里的参数捆绑起来:
    
  /**
	 * The name of the request parameter to bind to.
	 */
	String value() default "";)

SpringMVC入门 (六) 文件上传

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, (tle天> 传
fyl itlFe">hlass="001lass="search_002_c2"> 需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, v>
传及下载<
1 ) 》ank 介绍 bl iv> tica><那么ch_ lass="search_002_c2"> 需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, v>
需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, v>
条实现< ticle/1318262.htm" target="_blanle"> ticle/1318262.htm" target="_bl268200.htm" title="Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件ticle/e"_001_title"> 之ulti <2 e"_/scear-文件ts2earch 下ad n="s_/sc 需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, v>
266> e"_001001_ti268200.htm" title="Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件
001itl e"_001001_ti o seaitl illo-s_001 /span> lf"然_blae, ank"ae, 需求:要实现多文件上传,且要支持手机等移动设备... springmvc文件上传真头疼,网上搜了半天bg:"b try { / 现多文件上传, v>
3 始 -->
Sss="search_002_head">编辑推荐
13t="_blank">Fine Uploa 效率比较 >13t="_blank">Fine Up268200.htm" title="Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件 m" t="_blank">Fine Uploa /span>!-- ">13< 一13="search_001tle"> ear-外一13Sss="search_002_head">编辑推荐
41
1 e"_/sc 铺垫 1 e"_001001_ti sta m/lwww 2 里 org. sta 2 h_0f"re"uam" title="SpringMVC学习总结(六)——SpringMVC文件上传例子(2)" target="_blank">Sss="search_002_head">编辑推荐
3 0
_titlee"_001001_ti268200.htm" title="Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件 e"_001001_tie=&q会jar"e=&了coected FileU.jart;<个-io.jartae, ank e"_001001_ti功lass="search_002_c2"> 需求:要实现多文件上传,且要uam" t:要uam" t:uam" t
<