用spring mvc 进行文件的上传与下载

  文件的上传

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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<context:component-scan base-package="com.hanqi.controller" />
	
	<mvc:annotation-driven />
	
	<!-- 视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 上传文件的总大小, 单位是b -->
		<property name="maxUploadSize" value="10485760"></property>
		<!-- 上传单个文件的大小, 单位是b -->
		<property name="maxUploadSizePerFile" value="5000000"></property>
		<!-- 默认的字符集 -->
		<property name="defaultEncoding" value="utf-8"></property>
	</bean>
	
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

	xmlns="http://java.sun.com/xml/ns/javaee"

	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

	id="WebApp_ID" version="3.0">

	<servlet>
		<servlet-name>hanqi</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

		<!-- 启动时加载 -->
		<!-- 当数值大于等于0的时候, 启动时加载, 数值越小, 优先级越高 -->
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>hanqi</servlet-name>

		<url-pattern>*.form</url-pattern>
	</servlet-mapping>

</web-app>

TestControllor.java

@Controller
@RequestMapping("/file")
public class TestFileController {

        // ajax方式传递
	@ResponseBody
	@RequestMapping("/ajaxUpload")
	public String ajaxUpload(
			HttpServletRequest request, 
			MultipartFile myfile2, 
			String desp, 
			Model model) {
		StringBuffer buffer = new StringBuffer("{"success":true}");
		String name = myfile2.getOriginalFilename();
		
		System.out.println(name);
		
		return buffer.toString();
	}

	// 跳转页面
	@RequestMapping("/upload")
	public String upload(HttpServletRequest request, MultipartFile myfile, String desp, Model model) {
		// 获取服务器上的物理路径
		String path = request.getServletContext().getRealPath("/upload");
		String filename = myfile.getOriginalFilename();// 文件名+扩展名
		String orgName = String.valueOf(new Date().getTime());
		String suffixName = filename.substring(filename.lastIndexOf("."));
		File file = new File(path + "/" + orgName + suffixName);
		try {
			myfile.transferTo(file);
			model.addAttribute("msg", "上传成功 !");
		} catch (IllegalStateException e) {
			model.addAttribute("msg", "上传失败 !");
			e.printStackTrace();
		} catch (IOException e) {
			model.addAttribute("msg", "上传失败 !");
			e.printStackTrace();
		}
		return "page/success";
	}
}

index.jsp  进行文件选择的页面

<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
	$(function() {
		$("#btn").click(function() {
			var f = new FormData($("#fmData")[0]);
			$.ajax({
				type : "post",
				data : f,
				dataType : "json",
				contentType : false,
				processData : false,
				url : "file/ajaxUpload.form",
				success : function(data) {
					if (data.success) {
						alert("success !");
					} else {
						alert("fail !");
					}
				},
				error : function() {
					alert("error !");
				}
			});
		});
	});
</script>


<h1>文件上传(ajax)</h1>
	<form id="fmData">
		文件描述: <input name="desp" /><br> <input type="file"
			name="myfile2" /><br> <input id="btn" type="button"
			value="Submit" /><br>
	</form>
	<h1>文件上传(页面跳转)</h1>
	<form action="file/upload.form" method="post"
		enctype="multipart/form-data">
		文件描述: <input name="desp" /><br> <input type="file" name="myfile" /><br>
		<input type="submit" value="Submit" /><br>
	</form>

sucess.jsp

<body>
${msg }
</body>

文件的下载

TestFileControllor.java

@Controller
@RequestMapping("/file")
public class TestFileController {
	
	@RequestMapping("/redirectIndex")
	public String redirectIndex(HttpServletRequest request) {
		String realPath = request.getServletContext().getRealPath("/upload");
		File orgFile = new File(realPath);
		File[] files = orgFile.listFiles();
		List<String> list = new ArrayList<String>();
		list.add(realPath);
		for(File f : files) {
			list.add(f.getName());
		}
		request.getSession().setAttribute("fileList", list);
		return "redirect:/index.jsp";
	}


}

index.jsp

<a href="test.jsp">test.jsp</a><br>
	<a href="upload/javaweb.pdf" download>下载javaweb</a><br>
	<br>
	<%
		List<String> list = (List<String>) session.getAttribute("fileList");
		if (list != null) {
			/* 			for (String s : list) {
							out.print("<a href='#'>" + s + "</a><br>");
						} */
			for (int i = 1; i < list.size(); i++) {
				out.print("<a href='" + list.get(0) + "\" + list.get(i) + "' download>" + list.get(i) + "</a><br>");
			}
		} else {
			out.print("没有相关文件 !");
		}
	%>

test.jsp

<body>
<a href="file/redirectIndex.form">重定向到index.jsp</a>
</body>
原文地址:https://www.cnblogs.com/zuo72/p/8511741.html