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

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文件上传真头疼,网上搜了半天没发现
周末闲得无事,就随便写写,如标题所示,玩了一下uploadfy上传组件,类似uploadfy之类的Flash上传组
在上篇《深入springMVC------文件上传源码解析(上篇) 》中,介绍了springmvc文件上传相关。那么本篇
文件上传应该大部分人都接触过,一般都是基于commons-fileupload组件来实现,SpringMVC的文件上传功
关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接: 《关于Struts2的文件上传
这里说的springMVC文件上传,是基础的,iframe提交的方式;当然现在更多有在用jQuery的jquery.form.
准备工作: 前端引入:1、jquery,我在这里用的是:jquery-1.10.2.min.js 2、ajaxfileupload.js 这里可
springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种
1 前两篇文章的铺垫 1.1 SpringMVC文件上传源码分析前言 1.2 apache fileupload源码分析 2 整体的包
SpringMVC文件上传: 需要jar包:common-fileupload.jar common-io.jar 在SpringMVC中,文件上传功
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号