springMVC上传与下载
首先,springmvc.xml必须配置:
Java代码
1. <bean id="multipartResolver"
2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8"/>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8"/>
2 WEB-INF/lib下必加入:commons-fileupload.jar与commons-io-1.4.jar二个文件
3 表单属性为: enctype="multipart/form-data"
工程项目图片如下:
具体代码如下:
FileUploadBean.java
Java代码
1. public class FileUploadBean {
2. private byte[] file;
3.
4. public void setFile(byte[] file) {
5. this.file = file;
6. }
7.
8. public byte[] getFile() {
9. return file;
10. }
11. }
public class FileUploadBean {
private byte[] file;
public void setFile(byte[] file) {
this.file = file;
}
public byte[] getFile() {
return file;
}
}
Java代码
1. package net.liuzd.web;
2.
3. import java.io.BufferedInputStream;
4. import java.io.BufferedOutputStream;
5. import java.io.File;
6. import java.io.FileInputStream;
7. import java.io.IOException;
8. import java.net.BindException;
9. import java.util.ArrayList;
10.
11. import java.util.List;
12. import java.util.Map;
13.
14. import javax.servlet.http.HttpServletRequest;
15. import javax.servlet.http.HttpServletResponse;
16.
17. import org.springframework.stereotype.Controller;
18. import org.springframework.util.FileCopyUtils;
19. import org.springframework.web.bind.annotation.PathVariable;
20. import org.springframework.web.bind.annotation.RequestMapping;
21. import org.springframework.web.bind.annotation.RequestMethod;
22. import org.springframework.web.bind.annotation.RequestParam;
23. import org.springframework.web.multipart.MultipartFile;
24. import org.springframework.web.multipart.MultipartHttpServletRequest;
25. import org.springframework.web.multipart.commons.CommonsMultipartFile;
26. import org.springframework.web.servlet.ModelAndView;
27.
28. /**
29. * Title: Description: Copyright: Copyright (c) 2011
30. * Company:http://liuzidong.iteye.com/;Makedate:2011-5-27 下午01:52:17
31. *
32. * @author liuzidong
33. * @version 1.0
34. * @since 1.0
35. *
36. */
37. @Controller
38. public class FileUploadController {
39.
40. @RequestMapping(value = "/upload", method = RequestMethod.POST)
41. public ModelAndView onSubmit(HttpServletRequest request,
42. HttpServletResponse response, BindException errors)
43. throws Exception {
44.
45. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
46. CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
47. .getFile("file");
48.
49. String name = multipartRequest.getParameter("name");
50. System.out.println("name: " + name);
51. // 获得文件名:
52. String realFileName = file.getOriginalFilename();
53. System.out.println("获得文件名:" + realFileName);
54. // 获取路径
55. String ctxPath = request.getSession().getServletContext().getRealPath(
56. "/")
57. + "images/";
58. // 创建文件
59. File dirPath = new File(ctxPath);
60. if (!dirPath.exists()) {
61. dirPath.mkdir();
62. }
63. File uploadFile = new File(ctxPath + realFileName);
64. FileCopyUtils.copy(file.getBytes(), uploadFile);
65. request.setAttribute("files", loadFiles(request));
66. return new ModelAndView("success");
67. }
68.
69. @RequestMapping(value = "/upload2", method = RequestMethod.POST)
70. public ModelAndView onSubmit2(HttpServletRequest request,
71. HttpServletResponse response, BindException errors)
72. throws Exception {
73.
74. // 转型为MultipartHttpRequest
75. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
76. // 根据前台的name名称得到上传的文件
77. MultipartFile file = multipartRequest.getFile("file");
78. // 获得文件名:
79. String realFileName = file.getOriginalFilename();
80. // 获取路径
81. String ctxPath = request.getSession().getServletContext().getRealPath(
82. "/")
83. + "\\" + "images\\";
84. // 创建文件
85. File dirPath = new File(ctxPath);
86. if (!dirPath.exists()) {
87. dirPath.mkdir();
88. }
89. File uploadFile = new File(ctxPath + realFileName);
90. FileCopyUtils.copy(file.getBytes(), uploadFile);
91. request.setAttribute("files", loadFiles(request));
92. return new ModelAndView("success");
93. }
94.
95. @RequestMapping(value = "/upload3", method = RequestMethod.POST)
96. public String upload(@RequestParam("file")
97. MultipartFile image, HttpServletRequest request) throws IOException {
98.
99. String ctxPath = request.getSession().getServletContext().getRealPath(
100. "/")
101. + "\\" + "images\\";
102. System.out.println("路径:" + ctxPath);
103. File file = new File(ctxPath + "/" + image.getOriginalFilename());
104. // FileCopyUtils.copy(image.getBytes(),new
105. // File(ctxPath+"/"+image.getOriginalFilename()));
106. try {
107. image.transferTo(file); // 保存上传的文件
108. } catch (IllegalStateException e) {
109. e.printStackTrace();
110. } catch (IOException e) {
111. e.printStackTrace();
112. }
113. request.setAttribute("files", loadFiles(request));
114. return "success";
115. }
116.
117. // 多文件上传
118. @RequestMapping(value = "/upload4", method = RequestMethod.POST)
119. public ModelAndView fileUpload(HttpServletRequest request,
120. HttpServletResponse response, BindException errors)
121. throws Exception {
122.
123. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
124. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
125. String ctxPath = request.getSession().getServletContext().getRealPath(
126. "/")
127. + "\\" + "images\\";
128.
129. File file = new File(ctxPath);
130. if (!file.exists()) {
131. file.mkdir();
132. }
133. String fileName = null;
134. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
135. // 上传文件名
136. // System.out.println("key: " + entity.getKey());
137. MultipartFile mf = entity.getValue();
138. fileName = mf.getOriginalFilename();
139. File uploadFile = new File(ctxPath + fileName);
140. FileCopyUtils.copy(mf.getBytes(), uploadFile);
141. }
142. request.setAttribute("files", loadFiles(request));
143. return new ModelAndView("success");
144. }
145.
146. // @ModelAttribute("files")//此属性用于初始类时调用,但上传文件后不能时时反应上传文件个数,不适合动态数据
147. public List<String> loadFiles(HttpServletRequest request) {
148. List<String> files = new ArrayList<String>();
149. String ctxPath = request.getSession().getServletContext().getRealPath(
150. "/")
151. + "\\" + "images\\";
152. File file = new File(ctxPath);
153. if (file.exists()) {
154. File[] fs = file.listFiles();
155. String fname = null;
156. for (File f : fs) {
157. fname = f.getName();
158. if (f.isFile()) {
159. files.add(fname);
160. }
161. }
162. }
163. return files;
164. }
165.
166. @RequestMapping("/download/{fileName}")
167. public ModelAndView download(@PathVariable("fileName")
168. String fileName, HttpServletRequest request, HttpServletResponse response)
169. throws Exception {
170.
171. response.setContentType("text/html;charset=utf-8");
172. request.setCharacterEncoding("UTF-8");
173. java.io.BufferedInputStream bis = null;
174. java.io.BufferedOutputStream bos = null;
175.
176. String ctxPath = request.getSession().getServletContext().getRealPath(
177. "/")
178. + "\\" + "images\\";
179. String downLoadPath = ctxPath + fileName;
180. System.out.println(downLoadPath);
181. try {
182. long fileLength = new File(downLoadPath).length();
183. response.setContentType("application/x-msdownload;");
184. response.setHeader("Content-disposition", "attachment; filename="
185. + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
186. response.setHeader("Content-Length", String.valueOf(fileLength));
187. bis = new BufferedInputStream(new FileInputStream(downLoadPath));
188. bos = new BufferedOutputStream(response.getOutputStream());
189. byte[] buff = new byte[2048];
190. int bytesRead;
191. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
192. bos.write(buff, 0, bytesRead);
193. }
194. } catch (Exception e) {
195. e.printStackTrace();
196. } finally {
197. if (bis != null)
198. bis.close();
199. if (bos != null)
200. bos.close();
201. }
202. return null;
203. }
204.}
package net.liuzd.web;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.BindException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
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.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
/**
* Title: Description: Copyright: Copyright (c) 2011
* Company:http://liuzidong.iteye.com/ Makedate:2011-5-27 下午01:52:17
*
* @author liuzidong
* @version 1.0
* @since 1.0
*
*/
@Controller
public class FileUploadController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, BindException errors)
throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
.getFile("file");
String name = multipartRequest.getParameter("name");
System.out.println("name: " + name);
// 获得文件名:
String realFileName = file.getOriginalFilename();
System.out.println("获得文件名:" + realFileName);
// 获取路径
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "images/";
// 创建文件
File dirPath = new File(ctxPath);
if (!dirPath.exists()) {
dirPath.mkdir();
}
File uploadFile = new File(ctxPath + realFileName);
FileCopyUtils.copy(file.getBytes(), uploadFile);
request.setAttribute("files", loadFiles(request));
return new ModelAndView("success");
}
@RequestMapping(value = "/upload2", method = RequestMethod.POST)
public ModelAndView onSubmit2(HttpServletRequest request,
HttpServletResponse response, BindException errors)
throws Exception {
// 转型为MultipartHttpRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 根据前台的name名称得到上传的文件
MultipartFile file = multipartRequest.getFile("file");
// 获得文件名:
String realFileName = file.getOriginalFilename();
// 获取路径
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "\\" + "images\\";
// 创建文件
File dirPath = new File(ctxPath);
if (!dirPath.exists()) {
dirPath.mkdir();
}
File uploadFile = new File(ctxPath + realFileName);
FileCopyUtils.copy(file.getBytes(), uploadFile);
request.setAttribute("files", loadFiles(request));
return new ModelAndView("success");
}
@RequestMapping(value = "/upload3", method = RequestMethod.POST)
public String upload(@RequestParam("file")
MultipartFile image, HttpServletRequest request) throws IOException {
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "\\" + "images\\";
System.out.println("路径:" + ctxPath);
File file = new File(ctxPath + "/" + image.getOriginalFilename());
// FileCopyUtils.copy(image.getBytes(),new
// File(ctxPath+"/"+image.getOriginalFilename()));
try {
image.transferTo(file); // 保存上传的文件
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
request.setAttribute("files", loadFiles(request));
return "success";
}
// 多文件上传
@RequestMapping(value = "/upload4", method = RequestMethod.POST)
public ModelAndView fileUpload(HttpServletRequest request,
HttpServletResponse response, BindException errors)
throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "\\" + "images\\";
File file = new File(ctxPath);
if (!file.exists()) {
file.mkdir();
}
String fileName = null;
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 上传文件名
// System.out.println("key: " + entity.getKey());
MultipartFile mf = entity.getValue();
fileName = mf.getOriginalFilename();
File uploadFile = new File(ctxPath + fileName);
FileCopyUtils.copy(mf.getBytes(), uploadFile);
}
request.setAttribute("files", loadFiles(request));
return new ModelAndView("success");
}
// @ModelAttribute("files")//此属性用于初始类时调用,但上传文件后不能时时反应上传文件个数,不适合动态数据
public List<String> loadFiles(HttpServletRequest request) {
List<String> files = new ArrayList<String>();
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "\\" + "images\\";
File file = new File(ctxPath);
if (file.exists()) {
File[] fs = file.listFiles();
String fname = null;
for (File f : fs) {
fname = f.getName();
if (f.isFile()) {
files.add(fname);
}
}
}
return files;
}
@RequestMapping("/download/{fileName}")
public ModelAndView download(@PathVariable("fileName")
String fileName, HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
java.io.BufferedInputStream bis = null;
java.io.BufferedOutputStream bos = null;
String ctxPath = request.getSession().getServletContext().getRealPath(
"/")
+ "\\" + "images\\";
String downLoadPath = ctxPath + fileName;
System.out.println(downLoadPath);
try {
long fileLength = new File(downLoadPath).length();
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(downLoadPath));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
return null;
}
}
spring.xml
Java代码
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <beans xmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xmlns:p="http://www.springframework.org/schema/p"
5. xmlns:context="http://www.springframework.org/schema/context"
6. xsi:schemaLocation="
7. http://www.springframework.org/schema/beans
8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
9. http://www.springframework.org/schema/context
10. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
11. <!--
12. 自动搜索@Controller标注的类
13. 用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。
14. -->
15. <context:component-scan base-package="net.liuzd.web" />
16.
17. <!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
18. <bean
19. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
20. p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
21.
22.
23. <bean id="multipartResolver"
24. class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8">
25. <property name="maxUploadSize">
26. <value>104857600</value>
27. </property>
28. <property name="maxInMemorySize">
29. <value>4096</value>
30. </property>
31. </bean>
32. </beans>
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!--
自动搜索@Controller标注的类
用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。
-->
<context:component-scan base-package="net.liuzd.web" />
<!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8">
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
</beans>
success.jsp
Java代码
1. <%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>
2. <h1>Upload Successful</h1>
3. <c:forEach var="month" items="${files}">
4. <li><a href="${pageContext.request.contextPath}/download/${month}.do">${month}</a></li>
5. </c:forEach>
6. <hr><br>
7. <a href="${pageContext.request.contextPath}/index.jsp">返回</a>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>
<h1>Upload Successful</h1>
<c:forEach var="month" items="${files}">
<li><a href="${pageContext.request.contextPath}/download/${month}.do">${month}</a></li>
</c:forEach>
<hr><br>
<a href="${pageContext.request.contextPath}/index.jsp">返回</a>
web.xml
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6.
7. <context-param>
8. <param-name>log4jConfigLocation</param-name>
9. <param-value>/WEB-INF/classes/log4j.properties</param-value>
10. </context-param>
11.
12. <context-param>
13. <param-name>log4jRefreshInterval</param-name>
14. <param-value>60000</param-value>
15. </context-param>
16. <context-param>
17. <param-name>log4jExposeWebAppRoot</param-name>
18. <param-value>false</param-value>
19. </context-param>
20.
21. <listener>
22. <listener-class>
23. org.springframework.web.util.Log4jConfigListener
24. </listener-class>
25. </listener>
26.
27. <filter>
28. <filter-name>encodingFilter</filter-name>
29. <filter-class>
30. org.springframework.web.filter.CharacterEncodingFilter
31. </filter-class>
32. <init-param>
33. <param-name>encoding</param-name>
34. <param-value>UTF-8</param-value>
35. </init-param>
36. <init-param>
37. <param-name>forceEncoding</param-name>
38. <param-value>false</param-value>
39. </init-param>
40. </filter>
41.
42. <filter-mapping>
43. <filter-name>encodingFilter</filter-name>
44. <url-pattern>*.do</url-pattern>
45. </filter-mapping>
46.
47. <filter-mapping>
48. <filter-name>encodingFilter</filter-name>
49. <url-pattern>*.jsp</url-pattern>
50. </filter-mapping>
51.
52. <servlet>
53. <servlet-name>springmvc</servlet-name>
54. <servlet-class>
55. org.springframework.web.servlet.DispatcherServlet
56. </servlet-class>
57. <init-param>
58. <param-name>contextConfigLocation</param-name>
59. <param-value>classpath:springmvc.xml</param-value>
60. </init-param>
61. <load-on-startup>1</load-on-startup>
62. </servlet>
63.
64. <servlet-mapping>
65. <servlet-name>springmvc</servlet-name>
66. <url-pattern>*.do</url-pattern>
67. </servlet-mapping>
68. <welcome-file-list>
69. <welcome-file>index.jsp</welcome-file>
70. </welcome-file-list>
71. </web-app>