`

SpringMVC入门 (六) 文件上传

阅读更多
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入门基础之文件上传

    这篇博客"springmvc入门基础之文件上传"显然会讲解如何在Spring MVC应用中实现这一功能。我们将探讨相关的关键知识点,包括Spring MVC的MultipartFile接口、前端表单处理以及后台控制器的配置。 首先,`...

    SpringMVC学习(一)——SpringMVC入门小程序

    在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...

    SpringMVC上传图片文件到 腾讯云【2018年最新版】【JavaWeb】

    SpringMVC入门** SpringMVC作为Spring框架的一部分,提供了处理HTTP请求、数据绑定、模型视图解析等功能。它的核心组件包括DispatcherServlet、Controller、Model、View和ViewResolver等。在处理文件上传时,...

    SpringMVC入门学习

    SpringMVC支持文件上传,可以集成Apache Commons FileUpload和Apache Commons IO库来处理文件上传逻辑。同时,AjaxFileupload组件可以用来实现文件上传功能,实现异步文件上传而不刷新页面。 电子邮件的发送功能在...

    SpringMVC入门教程

    通过这个SpringMVC入门教程,你将学习到如何搭建SpringMVC环境,创建基本的Controller,处理HTTP请求,以及更高级的功能,如数据绑定、文件上传下载、异常处理和RESTful API设计。这将为你在实际项目中运用SpringMVC...

    SpringMVC入门项目

    通过这个SpringMVC入门项目,你可以学习到如何搭建SpringMVC环境,编写Controller,配置视图解析,处理表单数据,以及如何实现简单的CRUD操作。随着对SpringMVC的深入理解,你将能够构建更加复杂的Web应用。在实践中...

    SpringMVC入门实例

    在实际项目中,我们还可以涉及更多复杂功能,如表单数据绑定、异常处理、国际化、文件上传下载等。同时,结合 Spring Boot,可以进一步简化配置和启动流程,使开发更加高效。学习 SpringMVC 不仅要理解基础概念,还...

    springMVC做的小项目,可作为springMVC入门教材

    全注解开发是 SpringMVC 中的一种流行模式,它消除了传统的 XML 配置文件,转而使用 Java 注解来配置组件和服务。例如,`@Controller` 注解标记控制器类,`@RequestMapping` 注解映射 HTTP 请求,`@Autowired` 注解...

    springMVC 注解入门例子

    在这个入门例子中,我们将探讨如何使用SpringMVC的注解来实现用户信息的保存和文件上传功能。 首先,让我们了解SpringMVC的核心组件: 1. **DispatcherServlet**:它是SpringMVC的前端控制器,负责接收HTTP请求,...

    SpringMVC入门实例及详细讲解

    7. **上传文件与下载支持**:Spring MVC内置了对文件上传的支持,可以方便地处理multipart类型的请求,同时也可以支持文件的下载操作。 8. **国际化与主题支持**:Spring MVC提供本地化和主题功能,可以根据用户的...

    SpringMVC新手入门Demo1_1

    每个Demo都对应一个具体的功能点,如简单的HTTP请求处理、表单数据绑定、文件上传下载、分页查询等。通过实践这些例子,你可以更好地理解SpringMVC的工作原理和最佳实践,从而能够独立地创建和维护自己的SpringMVC ...

    springmvc入门的第一个简单demo(适合小白或者刚刚学习springmvc的同学)

    Spring MVC 是一个基于 Java ...随着学习的深入,你将接触到更多高级特性,如拦截器、模型属性绑定、数据验证、文件上传下载等。Spring MVC 提供了丰富的功能和良好的可扩展性,是开发企业级 Java Web 应用的强大工具。

    SpringMVC快速入门示例

    **SpringMVC快速入门示例** SpringMVC是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。它提供了一种简单而强大的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不必过于...

    非注解Springmvc+spring+hibernate 入门实例

    总的来说,这个入门实例旨在帮助初学者理解如何在没有使用注解的情况下,通过XML配置文件集成SpringMVC、Spring和Hibernate,完成一个简单的Web应用。虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解...

    springMVC学习

    本指南提供了 SpringMVC 的核心思想、框架特点、入门示例、参数传递、标签介绍、拦截器、类型转换、JSON 格式数据的输入和输出、文件上传、国际化和本地化、验证等方面的知识点,旨在帮助开发者快速掌握 SpringMVC ...

    Maven+SpringMVC+mybatis整合入门Demo

    5. **文件上传功能**:在SpringMVC中,文件上传可以通过`CommonsMultipartResolver`实现。用户选择文件后,文件会被转化为MultipartFile对象,Controller接收这个对象,然后将其存储到服务器的指定位置。这个过程...

    springmvc学习第一天

    #### 三、SpringMVC入门程序详解 入门程序是理解SpringMVC工作原理的重要途径,主要目的是熟悉SpringMVC的基本流程及其各个组件的作用。 - **非注解的处理器映射器和处理器适配器**:这是SpringMVC早期版本中使用的...

    SpringMVC项目接口Controller demo,入门参考

    本项目提供了一个Controller demo,是SpringMVC入门学习的理想参考资料。 在SpringMVC中,Controller扮演着核心角色,它负责接收HTTP请求,处理业务逻辑,并将结果转发给视图进行渲染。Controller类通常会使用`@...

    springmvc第一天课堂笔记.docx

    - **文件上传**:支持多文件上传功能。 - **JSON数据交互**:支持通过JSON格式进行数据交互。 - **RESTful支持**:支持RESTful风格的URL。 - **拦截器**:提供了一种机制可以在请求被处理之前或之后做一些预处理或后...

    尚硅谷SpringMVC部分全套教学文档笔记

    - SpringMVC提供了MultipartFile接口处理文件上传,需要配置CommonsMultipartResolver解析器。 - 文件上传时,Controller方法需要接收MultipartFile类型的参数,并能处理上传错误和文件大小限制。 10. **异常处理...

Global site tag (gtag.js) - Google Analytics