springMVC上传与下载

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>  

那一汪清眸,那一瞥青涩的目光,那一段青春岁月。我一直在寻找,寻找一个属于我的婆娑世界,寻找那一年的自己,再也回不去了……
原文地址:https://www.cnblogs.com/feiger/p/3936865.html