`
429537044
  • 浏览: 49098 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

springMVC3.2 简单实现文件的上传和下载

 
阅读更多

      今天通过各种手段做了一个springmvc简单实现文件上传下载的功能,特别记录在这里以备以后查询,并请各位大神大牛指导代码与设计中的不足。

        上传文件------展示文件库中所有的文件-------点击下载按钮下载

源代码在附件中

web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<!-- spring mvc 拦截  start -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
<!-- spring mvc 拦截  end -->
	
	<!-- 编码问题 start-->
	
	<filter>
		<filter-name>Set Character Encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>Set Character Encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- 编码问题 end-->
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

springmvc配置文件代码spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

	<context:component-scan base-package="springapp" />
	<mvc:annotation-driven />
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/view/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 配置 文件上传 start -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="1000000" />
	</bean>
	<!-- 配置 文件上传 end -->
</beans>

 文件上传的页面uploadFile.jsp

<form action="fileupload.do" method="post" enctype="multipart/form-data">
			file:<input type="file" name="file"/><br/>
			<input type="submit" value="submit"/>
		</form>

 展示所有文件的页面

 <c:forEach items="${files}" var="file">
  	<form action="downloadFile.do" method="post" >
  		<label>${file.name}</label>
  		<input type="submit" value="下载"/>
  		<input type="hidden"  name ="fileName" value="${file.name}">
  	</form>
  </c:forEach>

 

文件上传、展示、下载的控制类

package springapp.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
public class FileAction implements ServletContextAware {

	private ServletContext servletContext;

	/**
	 * 单个文件上传
	 * 
	 * @param request
	 * @param mrequest
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "fileupload.do", method = RequestMethod.POST)
	public String fileUpload(HttpServletRequest request, Model model,
			MultipartHttpServletRequest mrequest, HttpServletResponse response)
			throws IOException {

		MultipartFile file = mrequest.getFile("file");
		String fileName = file.getOriginalFilename();
		String path = this.servletContext.getRealPath("temp");
		// System.out.println(path);
		String pathAndfileName = path + "\\" + fileName;
		// System.out.println(pathAndfileName);
		if (!file.isEmpty()) {
			this.copyFile(file.getInputStream(), pathAndfileName);
			return "redirect:showFile.do";
		}
		model.addAttribute("msg", "上失败");
		return "uploadFile";

	}

	/**
	 * 保存文件到本地
	 * 
	 * @param in
	 * @param fileName
	 * @throws IOException
	 */
	public void copyFile(InputStream in, String filePathAndName)
			throws IOException {

		FileOutputStream fos = new FileOutputStream(filePathAndName);
		byte[] buffer = new byte[1024 * 1024];
		int bytesum = 0;
		int byteread = 0;
		while ((byteread = in.read(buffer)) != -1) {
			bytesum += byteread;
			fos.write(buffer, 0, byteread);
			fos.flush();
		}
		fos.close();
		in.close();

	}

	public void setServletContext(ServletContext arg0) {
		// TODO Auto-generated method stub
		this.servletContext = arg0;

	}

	/**
	 * 展示文件
	 * 
	 * @param model
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping("showFile.do")
	public String showFile(Model model, HttpServletRequest request,
			HttpServletResponse response) {
		String fileAddress = this.servletContext.getRealPath("temp");
		File[] files = new File(fileAddress).listFiles();
		List<File> fileList = new ArrayList<File>();
		for (File file : files) {
			fileList.add(file);

		}

		model.addAttribute("files", fileList);
		return "showFile";
	}

	/**
	 * 下载文件
	 * @param response
	 * @param fileName
	 * @throws IOException
	 */
	@RequestMapping(value = "downloadFile.do", method = RequestMethod.POST)
	public void downLoadFile(HttpServletResponse response,
			@RequestParam("fileName")
			String fileName) throws IOException {
		response.setContentType("multipart/form-data");
		response.setHeader("Content-Disposition", "attachment;fileName="
				+ new String(fileName.getBytes("gb2312"), "iso8859-1"));
		File file = new File(fileName);
		String path = this.servletContext.getRealPath("temp");
		InputStream in = new FileInputStream(path + "\\" + file);

		OutputStream os = response.getOutputStream();

		byte[] b = new byte[1024 * 1024];
		int length;
		while ((length = in.read(b)) > 0) {
			os.write(b, 0, length);
		}
		in.close();
	}

}

 

分享到:
评论
4 楼 sheertewtw 2016-09-09  
                 地狱
3 楼 sheertewtw 2016-09-09  
                   地板
2 楼 sheertewtw 2016-09-09  
            板凳
1 楼 sheertewtw 2016-09-09  
             沙发

相关推荐

    springmvc3.2_practice

    SpringMVC提供方便的文件上传和下载支持。`MultipartFile`接口处理文件上传,而`StreamingResponseBody`则可用于大文件的分块下载。 九、RESTful风格的支持 SpringMVC 3.2加强了对RESTful风格的支持,包括使用URI...

    springmvc demo

    Spring Web MVC是一种基于Java的实现了...支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

    Springmvc中文手册下载

    Spring MVC 提供了处理文件上传和下载的便利功能,支持多文件上传,以及设置文件大小限制。 12. **异步处理** 使用 `@Async` 和 `@EnableAsync` 注解,可以实现 MVC 控制器方法的异步执行,提高应用性能。 13. *...

    springmvc文件上传.docx

    然而,在Spring MVC框架中,为了更好地整合现有的技术栈并简化开发流程,Spring MVC提供了内置的支持来处理文件上传,而这一切都是通过`MultipartFile`接口来实现的。 #### 二、Spring MVC 文件上传的核心组件——...

    SpringMVC学习课堂笔记

    通过`MultipartFile`类处理文件上传。 ##### 6.4 JSON数据交互 利用`@RequestBody`和`@ResponseBody`注解进行JSON数据的读写。 ##### 6.5 RESTful支持 使用`@GetMapping`、`@PostMapping`等注解实现RESTful风格...

    SpringMVC是Spring家族的一款专注于解决控制器层问题的框架技术,学习资料第二天

    本篇文章将对 SpringMVC 的数据管理、Ajax 交互、文件上传、下载、验证码、拦截器实现和全局异常处理等方面的知识点进行详细的解释。 一、SpringMVC 数据管理 在 SpringMVC 中,数据管理是通过 Model 机制和 ...

    springMVC教程

    本教程旨在深入讲解 SpringMVC 中的关键技术和实现方式,帮助开发者快速掌握并应用在实际项目中。 **初识 SpringMVC** 在 Web 开发领域,MVC 设计模式被广泛采用,它将业务逻辑(Model)、用户界面(View)和数据...

    springmvc课堂笔记

    - **实现方式**:使用MultipartResolver解析文件上传请求,通过`@RequestParam`或`@RequestPart`注解处理上传文件。 ##### 6.4 JSON数据交互 - **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串...

    尚硅谷SpringMVC视频

    - **实现方式**:通过MultipartFile接口处理文件上传操作。 - **配置项**:配置文件大小限制等。 #### 5.3 异常处理 - **全局异常处理器**:使用@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。 - *...

    三歪教你学SpringMVC.docx

    SpringMVC支持文件上传,只需添加相应的依赖并在控制器方法中处理上传的文件。 #### 六、拦截器与异常处理 **6.1 拦截器(Interceptor)** SpringMVC支持自定义拦截器,用于在处理请求前后执行特定操作。 **6.2 ...

    springMvc连接

    - **强大的功能**:包括表单验证、文件上传、国际化支持等。 ### 二、Spring MVC的工作流程 #### 2.1 请求处理流程 1. **前端控制器**(DispatcherServlet):作为请求的入口,接收客户端请求。 2. **处理器映射器...

    spring3.2整套jar包

    Spring 3.2 版本是该框架的一个重要里程碑,包含了多个模块,每个模块都有其特定的功能和用途。以下是对给定的Spring 3.2全套jar包的详细解析: 1. **spring-core-3.2.11.RELEASE.jar**:这是Spring框架的核心模块...

    java-springmvcDemo

    5.3 文件上传下载:通过CommonsMultipartFile实现文件上传,OutputStream处理文件下载。 5.4 RESTful风格:使用@RequestMapping配合HTTP动词(GET、POST、PUT、DELETE等)实现RESTful API。 六、实战应用 在实际...

    spring5mvc第一天【大纲笔记】.zip

    SpringMVC提供了便捷的文件上传和下载功能,通过MultipartFile接口处理上传文件,通过StreamingResponseBody处理文件下载。 4.4 异常处理 自定义异常处理器,使用@ControllerAdvice和@ExceptionHandler注解,可以...

    SSM集成应用

    **11.2 Spring文件上传和下载** 具体的实现细节,如使用MultipartFile类处理文件。 **11.3 异常处理** 通过@ControllerAdvice和@ExceptionHandler注解处理异常。 **11.4 拦截器** 拦截器可以对请求进行预处理或...

    springmvc 中文手册详细带书签.pdf

    它支持将请求映射到控制器方法,并提供了对请求和响应的完整控制,包括数据绑定、数据验证、国际化、文件上传等功能。 Spring MVC还支持通过@Valid注解进行声明式模型验证,可以对请求数据进行验证,并将验证结果以...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    3、ExtJS的HtmlEditor的图片文件上传插件。 4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7...

    Spring_MVC_051:Spring MVC 学习总结(五)——校验与文件上传

    Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...

    毕业论文ssm529OA办公系统设计与实现+vue论文.doc

    实现文件的上传、下载、分享和版本控制,保证文件的安全和一致性。 3.6 通讯录管理 维护企业内部员工联系信息,便于快速查找和沟通。 第 4 章 功能分析与业务流程分析 这部分详细阐述各个功能模块的工作原理和业务...

Global site tag (gtag.js) - Google Analytics