SSM框架-SpringMVC 实例文件上传下载

一、新建一个Web工程,导入相关的包

springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar

整个相关的包如下:

整个工程目录如下:

二、配置web.xml和SpringMVC文件

(1)web.xml

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  

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

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

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

  5.     id="WebApp_ID" version="3.0">  

  6.     <!-- SpringMVC的前端控制器 -->  

  7.     <servlet>  

  8.         <servlet-name>MyDispatcher</servlet-name>  

  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  10.         <!-- 设置自己定义的控制器xml文件 -->  

  11.         <init-param>  

  12.             <param-name>contextConfigLocation</param-name>  

  13.             <param-value>/WEB-INF/springMVC-servlet.xml</param-value>  

  14.         </init-param>  

  15.         <load-on-startup>1</load-on-startup>  

  16.     </servlet>  

  17.     <!-- Spring MVC配置文件结束 -->  

  18.   

  19.     <!-- 拦截设置 -->  

  20.     <servlet-mapping>  

  21.         <servlet-name>MyDispatcher</servlet-name>  

  22.         <!-- 由SpringMVC拦截所有请求 -->  

  23.         <url-pattern>/</url-pattern>  

  24.     </servlet-mapping>  

  25.       

  26. </web-app>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  

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

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

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

  5.     id="WebApp_ID" version="3.0">  

  6.     <!-- SpringMVC的前端控制器 -->  

  7.     <servlet>  

  8.         <servlet-name>MyDispatcher</servlet-name>  

  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  10.         <!-- 设置自己定义的控制器xml文件 -->  

  11.         <init-param>  

  12.             <param-name>contextConfigLocation</param-name>  

  13.             <param-value>/WEB-INF/springMVC-servlet.xml</param-value>  

  14.         </init-param>  

  15.         <load-on-startup>1</load-on-startup>  

  16.     </servlet>  

  17.     <!-- Spring MVC配置文件结束 -->  

  18.   

  19.     <!-- 拦截设置 -->  

  20.     <servlet-mapping>  

  21.         <servlet-name>MyDispatcher</servlet-name>  

  22.         <!-- 由SpringMVC拦截所有请求 -->  

  23.         <url-pattern>/</url-pattern>  

  24.     </servlet-mapping>  

  25.       

  26. </web-app>  

(2)springMVC-servlet.xml文件

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <beans xmlns="http://www.springframework.org/schema/beans"  

  2.     xmlns:context="http://www.springframework.org/schema/context"  

  3.     xmlns:util="http://www.springframework.org/schema/util"   

  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  

  5.      xmlns:mvc="http://www.springframework.org/schema/mvc"    

  6.     xsi:schemaLocation="    

  7.         http://www.springframework.org/schema/util   

  8.         http://www.springframework.org/schema/util/spring-util-3.0.xsd  

  9.         http://www.springframework.org/schema/mvc   

  10.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

  11.         http://www.springframework.org/schema/beans         

  12.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    

  13.         http://www.springframework.org/schema/mvc      

  14.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

  15.         http://www.springframework.org/schema/context     

  16.         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

  17.           

  18.     <!-- 把标记了@Controller注解的类转换为bean -->  

  19.     <context:component-scan base-package="com.mucfc" />  

  20.     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  

  21.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  

  22.         p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>  

  23.             

  24.     <!-- 上传文件的设置 ,maxUploadSize=-1,表示无穷大。uploadTempDir为上传的临时目录 -->  

  25.    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"    

  26.         p:defaultEncoding="UTF-8"    

  27.         p:maxUploadSize="5400000"    

  28.         p:uploadTempDir="fileUpload/temp"    

  29.      />    

  30.   

  31. </beans>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <beans xmlns="http://www.springframework.org/schema/beans"  

  2.     xmlns:context="http://www.springframework.org/schema/context"  

  3.     xmlns:util="http://www.springframework.org/schema/util"   

  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  

  5.      xmlns:mvc="http://www.springframework.org/schema/mvc"    

  6.     xsi:schemaLocation="    

  7.         http://www.springframework.org/schema/util   

  8.         http://www.springframework.org/schema/util/spring-util-3.0.xsd  

  9.         http://www.springframework.org/schema/mvc   

  10.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

  11.         http://www.springframework.org/schema/beans         

  12.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    

  13.         http://www.springframework.org/schema/mvc      

  14.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

  15.         http://www.springframework.org/schema/context     

  16.         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

  17.           

  18.     <!-- 把标记了@Controller注解的类转换为bean -->  

  19.     <context:component-scan base-package="com.mucfc" />  

  20.     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  

  21.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  

  22.         p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>  

  23.             

  24.     <!-- 上传文件的设置 ,maxUploadSize=-1,表示无穷大。uploadTempDir为上传的临时目录 -->  

  25.    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"    

  26.         p:defaultEncoding="UTF-8"    

  27.         p:maxUploadSize="5400000"    

  28.         p:uploadTempDir="fileUpload/temp"    

  29.      />    

  30.   

  31. </beans>  

 

三、单个文件上传

(1)控制器

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @Controller  

  2. @RequestMapping("/file")  

  3. public class FileController {  

  4.   

  5.     @RequestMapping("/toFile")  

  6.     public String toFileUpload() {  

  7.         return "fileUpload";  

  8.     }  

  9.   

  10.     @RequestMapping("/toFile2")  

  11.     public String toFileUpload2() {  

  12.         return "fileUpload2";  

  13.     }  

  14.   

  15.     /** 

  16.      * 方法一上传文件 

  17.      */  

  18.     @RequestMapping("/onefile")  

  19.     public String oneFileUpload(  

  20.             @RequestParam("file") CommonsMultipartFile file,  

  21.             HttpServletRequest request, ModelMap model) {  

  22.   

  23.         // 获得原始文件名  

  24.         String fileName = file.getOriginalFilename();  

  25.         System.out.println("原始文件名:" + fileName);  

  26.   

  27.         // 新文件名  

  28.         String newFileName = UUID.randomUUID() + fileName;  

  29.   

  30.         // 获得项目的路径  

  31.         ServletContext sc = request.getSession().getServletContext();  

  32.         // 上传位置  

  33.         String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  34.   

  35.         File f = new File(path);  

  36.         if (!f.exists())  

  37.             f.mkdirs();  

  38.         if (!file.isEmpty()) {  

  39.             try {  

  40.                 FileOutputStream fos = new FileOutputStream(path + newFileName);  

  41.                 InputStream in = file.getInputStream();  

  42.                 int b = 0;  

  43.                 while ((b = in.read()) != -1) {  

  44.                     fos.write(b);  

  45.                 }  

  46.                 fos.close();  

  47.                 in.close();  

  48.             } catch (Exception e) {  

  49.                 e.printStackTrace();  

  50.             }  

  51.         }  

  52.   

  53.         System.out.println("上传图片到:" + path + newFileName);  

  54.         // 保存文件地址,用于JSP页面回显  

  55.         model.addAttribute("fileUrl", path + newFileName);  

  56.         return "fileUpload";  

  57.     }  

  58.   

  59.     /** 

  60.      * 方法二上传文件,一次一张 

  61.      */  

  62.     @RequestMapping("/onefile2")  

  63.     public String oneFileUpload2(HttpServletRequest request,  

  64.             HttpServletResponse response) throws Exception {  

  65.         CommonsMultipartResolver cmr = new CommonsMultipartResolver(  

  66.                 request.getServletContext());  

  67.         if (cmr.isMultipart(request)) {  

  68.             MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);  

  69.             Iterator<String> files = mRequest.getFileNames();  

  70.             while (files.hasNext()) {  

  71.                 MultipartFile mFile = mRequest.getFile(files.next());  

  72.                 if (mFile != null) {  

  73.                     String fileName = UUID.randomUUID()  

  74.                             + mFile.getOriginalFilename();  

  75.                     String path = "d:/upload/" + fileName;  

  76.   

  77.                     File localFile = new File(path);  

  78.                     mFile.transferTo(localFile);  

  79.                     request.setAttribute("fileUrl", path);  

  80.                 }  

  81.             }  

  82.         }  

  83.         return "fileUpload";  

  84.     }  

  85. }  

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @Controller  

  2. @RequestMapping("/file")  

  3. public class FileController {  

  4.   

  5.     @RequestMapping("/toFile")  

  6.     public String toFileUpload() {  

  7.         return "fileUpload";  

  8.     }  

  9.   

  10.     @RequestMapping("/toFile2")  

  11.     public String toFileUpload2() {  

  12.         return "fileUpload2";  

  13.     }  

  14.   

  15.     /** 

  16.      * 方法一上传文件 

  17.      */  

  18.     @RequestMapping("/onefile")  

  19.     public String oneFileUpload(  

  20.             @RequestParam("file") CommonsMultipartFile file,  

  21.             HttpServletRequest request, ModelMap model) {  

  22.   

  23.         // 获得原始文件名  

  24.         String fileName = file.getOriginalFilename();  

  25.         System.out.println("原始文件名:" + fileName);  

  26.   

  27.         // 新文件名  

  28.         String newFileName = UUID.randomUUID() + fileName;  

  29.   

  30.         // 获得项目的路径  

  31.         ServletContext sc = request.getSession().getServletContext();  

  32.         // 上传位置  

  33.         String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  34.   

  35.         File f = new File(path);  

  36.         if (!f.exists())  

  37.             f.mkdirs();  

  38.         if (!file.isEmpty()) {  

  39.             try {  

  40.                 FileOutputStream fos = new FileOutputStream(path + newFileName);  

  41.                 InputStream in = file.getInputStream();  

  42.                 int b = 0;  

  43.                 while ((b = in.read()) != -1) {  

  44.                     fos.write(b);  

  45.                 }  

  46.                 fos.close();  

  47.                 in.close();  

  48.             } catch (Exception e) {  

  49.                 e.printStackTrace();  

  50.             }  

  51.         }  

  52.   

  53.         System.out.println("上传图片到:" + path + newFileName);  

  54.         // 保存文件地址,用于JSP页面回显  

  55.         model.addAttribute("fileUrl", path + newFileName);  

  56.         return "fileUpload";  

  57.     }  

  58.   

  59.     /** 

  60.      * 方法二上传文件,一次一张 

  61.      */  

  62.     @RequestMapping("/onefile2")  

  63.     public String oneFileUpload2(HttpServletRequest request,  

  64.             HttpServletResponse response) throws Exception {  

  65.         CommonsMultipartResolver cmr = new CommonsMultipartResolver(  

  66.                 request.getServletContext());  

  67.         if (cmr.isMultipart(request)) {  

  68.             MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);  

  69.             Iterator<String> files = mRequest.getFileNames();  

  70.             while (files.hasNext()) {  

  71.                 MultipartFile mFile = mRequest.getFile(files.next());  

  72.                 if (mFile != null) {  

  73.                     String fileName = UUID.randomUUID()  

  74.                             + mFile.getOriginalFilename();  

  75.                     String path = "d:/upload/" + fileName;  

  76.   

  77.                     File localFile = new File(path);  

  78.                     mFile.transferTo(localFile);  

  79.                     request.setAttribute("fileUrl", path);  

  80.                 }  

  81.             }  

  82.         }  

  83.         return "fileUpload";  

  84.     }  

  85. }  

(2)JSP,这个页面是用来上传又用来显示上传后的图片的页面fileUpload.jsp

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  

  4. <%  

  5.     String path = request.getContextPath();  

  6.     String basePath = request.getScheme() + "://"  

  7.             + request.getServerName() + ":" + request.getServerPort()  

  8.             + path + "/";  

  9. %>  

  10. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  11. <html>  

  12. <head>  

  13. <title>用户上传图片页面</title>  

  14.  <base href="<%=basePath%>">  

  15. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  16. </head>  

  17. <body>  

  18.     <center>  

  19.         <form action="file/onefile"  

  20.             method="post" enctype="multipart/form-data">  

  21.             <input type="file" name="file" />   

  22.             <input type="submit" value="上 传" />  

  23.         </form>  

  24.         <h5>上传结果:</h5>  

  25.         <img alt="暂无图片" src="${fileUrl}" />  

  26.     </center>  

  27. </body>  

  28. </html>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  

  4. <%  

  5.     String path = request.getContextPath();  

  6.     String basePath = request.getScheme() + "://"  

  7.             + request.getServerName() + ":" + request.getServerPort()  

  8.             + path + "/";  

  9. %>  

  10. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  11. <html>  

  12. <head>  

  13. <title>用户上传图片页面</title>  

  14.  <base href="<%=basePath%>">  

  15. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  16. </head>  

  17. <body>  

  18.     <center>  

  19.         <form action="file/onefile"  

  20.             method="post" enctype="multipart/form-data">  

  21.             <input type="file" name="file" />   

  22.             <input type="submit" value="上 传" />  

  23.         </form>  

  24.         <h5>上传结果:</h5>  

  25.         <img alt="暂无图片" src="${fileUrl}" />  

  26.     </center>  

  27. </body>  

  28. </html>  

 

现在运行后来看看效果,输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile

控制台输出结果,选择图片后

原始文件名:Chrysanthemum.jpg
上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/4eafc28c-4baa-4018-ac06-c4a5aec88d6cChrysanthemum.jpg

图片已被上传,可以在JSP中显示出来

来看看服务器的路径:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img

表明图片已经上传到服务器

方法二:

使用文件流的方式来上传

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 方法二上传文件,一次一张 

  3.  */  

  4. @RequestMapping("/onefile2")  

  5. public String oneFileUpload2(HttpServletRequest request,  

  6.         HttpServletResponse response) throws Exception {  

  7.     CommonsMultipartResolver cmr = new CommonsMultipartResolver(  

  8.             request.getServletContext());  

  9.     if (cmr.isMultipart(request)) {  

  10.         MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);  

  11.         Iterator<String> files = mRequest.getFileNames();  

  12.         while (files.hasNext()) {  

  13.             MultipartFile mFile = mRequest.getFile(files.next());  

  14.             if (mFile != null) {  

  15.                 String fileName = UUID.randomUUID()  

  16.                         + mFile.getOriginalFilename();  

  17.                 String path = "d:/upload/" + fileName;  

  18.   

  19.                 File localFile = new File(path);  

  20.                 mFile.transferTo(localFile);  

  21.                 request.setAttribute("fileUrl", path);  

  22.             }  

  23.         }  

  24.     }  

  25.     return "fileUpload";  

  26. }  

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 方法二上传文件,一次一张 

  3.  */  

  4. @RequestMapping("/onefile2")  

  5. public String oneFileUpload2(HttpServletRequest request,  

  6.         HttpServletResponse response) throws Exception {  

  7.     CommonsMultipartResolver cmr = new CommonsMultipartResolver(  

  8.             request.getServletContext());  

  9.     if (cmr.isMultipart(request)) {  

  10.         MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);  

  11.         Iterator<String> files = mRequest.getFileNames();  

  12.         while (files.hasNext()) {  

  13.             MultipartFile mFile = mRequest.getFile(files.next());  

  14.             if (mFile != null) {  

  15.                 String fileName = UUID.randomUUID()  

  16.                         + mFile.getOriginalFilename();  

  17.                 String path = "d:/upload/" + fileName;  

  18.   

  19.                 File localFile = new File(path);  

  20.                 mFile.transferTo(localFile);  

  21.                 request.setAttribute("fileUrl", path);  

  22.             }  

  23.         }  

  24.     }  

  25.     return "fileUpload";  

  26. }  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <center>  

  2.     <form action="file/onefile"  

  3.         method="post" enctype="multipart/form-data">  

  4.         <input type="file" name="file" />   

  5.         <input type="submit" value="上 传" />  

  6.     </form>  

  7.     <h5>上传结果:</h5>  

  8.     <img alt="暂无图片" src="${fileUrl}" />  

  9. </center>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <center>  

  2.     <form action="file/onefile"  

  3.         method="post" enctype="multipart/form-data">  

  4.         <input type="file" name="file" />   

  5.         <input type="submit" value="上 传" />  

  6.     </form>  

  7.     <h5>上传结果:</h5>  

  8.     <img alt="暂无图片" src="${fileUrl}" />  

  9. </center>  

中的

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <form action="file/onefile"  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <form action="file/onefile"  

改成

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <form action="file/onefile2"  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <form action="file/onefile2"  

输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile

方法二指定上传到了本地E盘的upload文件夹

页面结果

四、多文件上传

(1)控制器

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @RequestMapping("/toFile2")  

  2. public String toFileUpload2() {  

  3.     return "fileUpload2";  

  4. }  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @RequestMapping("/toFile2")  

  2. public String toFileUpload2() {  

  3.     return "fileUpload2";  

  4. }  

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 一次上传多张图片 

  3.  */  

  4. @RequestMapping("/threeFile")  

  5. public String threeFileUpload(  

  6.         @RequestParam("file") CommonsMultipartFile files[],  

  7.         HttpServletRequest request, ModelMap model) {  

  8.   

  9.     List<String> list = new ArrayList<String>();  

  10.     // 获得项目的路径  

  11.     ServletContext sc = request.getSession().getServletContext();  

  12.     // 上传位置  

  13.     String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  14.     File f = new File(path);  

  15.     if (!f.exists())  

  16.         f.mkdirs();  

  17.   

  18.     for (int i = 0; i < files.length; i++) {  

  19.         // 获得原始文件名  

  20.         String fileName = files[i].getOriginalFilename();  

  21.         System.out.println("原始文件名:" + fileName);  

  22.         // 新文件名  

  23.         String newFileName = UUID.randomUUID() + fileName;  

  24.         if (!files[i].isEmpty()) {  

  25.             try {  

  26.                 FileOutputStream fos = new FileOutputStream(path  

  27.                         + newFileName);  

  28.                 InputStream in = files[i].getInputStream();  

  29.                 int b = 0;  

  30.                 while ((b = in.read()) != -1) {  

  31.                     fos.write(b);  

  32.                 }  

  33.                 fos.close();  

  34.                 in.close();  

  35.             } catch (Exception e) {  

  36.                 e.printStackTrace();  

  37.             }  

  38.         }  

  39.         System.out.println("上传图片到:" + path + newFileName);  

  40.         list.add(path + newFileName);  

  41.   

  42.     }  

  43.     // 保存文件地址,用于JSP页面回显  

  44.     model.addAttribute("fileList", list);  

  45.     return "fileUpload2";  

  46.   

  47. }  

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 一次上传多张图片 

  3.  */  

  4. @RequestMapping("/threeFile")  

  5. public String threeFileUpload(  

  6.         @RequestParam("file") CommonsMultipartFile files[],  

  7.         HttpServletRequest request, ModelMap model) {  

  8.   

  9.     List<String> list = new ArrayList<String>();  

  10.     // 获得项目的路径  

  11.     ServletContext sc = request.getSession().getServletContext();  

  12.     // 上传位置  

  13.     String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  14.     File f = new File(path);  

  15.     if (!f.exists())  

  16.         f.mkdirs();  

  17.   

  18.     for (int i = 0; i < files.length; i++) {  

  19.         // 获得原始文件名  

  20.         String fileName = files[i].getOriginalFilename();  

  21.         System.out.println("原始文件名:" + fileName);  

  22.         // 新文件名  

  23.         String newFileName = UUID.randomUUID() + fileName;  

  24.         if (!files[i].isEmpty()) {  

  25.             try {  

  26.                 FileOutputStream fos = new FileOutputStream(path  

  27.                         + newFileName);  

  28.                 InputStream in = files[i].getInputStream();  

  29.                 int b = 0;  

  30.                 while ((b = in.read()) != -1) {  

  31.                     fos.write(b);  

  32.                 }  

  33.                 fos.close();  

  34.                 in.close();  

  35.             } catch (Exception e) {  

  36.                 e.printStackTrace();  

  37.             }  

  38.         }  

  39.         System.out.println("上传图片到:" + path + newFileName);  

  40.         list.add(path + newFileName);  

  41.   

  42.     }  

  43.     // 保存文件地址,用于JSP页面回显  

  44.     model.addAttribute("fileList", list);  

  45.     return "fileUpload2";  

  46.   

  47. }  

其实就是在单文件上传的方法一中来修改的,只不过弄成了个循环

(2)JSP显示页面fileUpload2.jsp

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  

  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  

  5. <%  

  6.     String path = request.getContextPath();  

  7.     String basePath = request.getScheme() + "://"  

  8.             + request.getServerName() + ":" + request.getServerPort()  

  9.             + path + "/";  

  10. %>  

  11. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  12. <html>  

  13. <head>  

  14. <title>用户上传图片页面</title>  

  15. <base href="<%=basePath%>">  

  16. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  17. </head>  

  18. <body>  

  19.     <center>  

  20.         <form action="file/threeFile" method="post"  

  21.             enctype="multipart/form-data">  

  22.             <input type="file" name="file" /><br /> <input type="file"  

  23.                 name="file" /><br /> <input type="file" name="file" /><br /> <input  

  24.                 type="submit" value="上 传" />  

  25.         </form>  

  26.         <h5>上传结果:</h5>  

  27.   

  28.         <c:forEach items="${fileList}" var="imagename">  

  29.                 <img alt="暂无图片" src="${imagename}" /> <br/>  

  30.         </c:forEach>  

  31.   

  32.   

  33.   

  34.     </center>  

  35. </body>  

  36. </html>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  

  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  

  5. <%  

  6.     String path = request.getContextPath();  

  7.     String basePath = request.getScheme() + "://"  

  8.             + request.getServerName() + ":" + request.getServerPort()  

  9.             + path + "/";  

  10. %>  

  11. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  12. <html>  

  13. <head>  

  14. <title>用户上传图片页面</title>  

  15. <base href="<%=basePath%>">  

  16. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  17. </head>  

  18. <body>  

  19.     <center>  

  20.         <form action="file/threeFile" method="post"  

  21.             enctype="multipart/form-data">  

  22.             <input type="file" name="file" /><br /> <input type="file"  

  23.                 name="file" /><br /> <input type="file" name="file" /><br /> <input  

  24.                 type="submit" value="上 传" />  

  25.         </form>  

  26.         <h5>上传结果:</h5>  

  27.   

  28.         <c:forEach items="${fileList}" var="imagename">  

  29.                 <img alt="暂无图片" src="${imagename}" /> <br/>  

  30.         </c:forEach>  

  31.   

  32.   

  33.   

  34.     </center>  

  35. </body>  

  36. </html>  

注意这里用了

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. </c:forEach>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. </c:forEach>  

表单,需要jstl.jar+standard.jar

(3)运行后输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile2(注意上面是单文件没有后面的数字2)

选择图片,然后点上传

控制台输出结果:

图片不清看文字 吧:

原始文件名:Desert.jpg
上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/2baccc77-43b6-4908-859d-507e86a04051Desert.jpg
原始文件名:Hydrangeas.jpg
上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/51ad04e0-82aa-4b2c-958d-f00651e9ed6bHydrangeas.jpg
原始文件名:Jellyfish.jpg
上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/dee340d8-9cc0-41ae-9959-f7fa47ff172bJellyfish.jpg

三张图片都可以显示出来了

来看看服务器,这就是刚刚上传的三张

五、上传文件列表显示

(1)控制器

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 列出所有的图片 

  3.  */  

  4. @RequestMapping("/listFile")  

  5. public String listFile(HttpServletRequest request,  

  6.         HttpServletResponse response) {  

  7.     // 获取上传文件的目录  

  8.     ServletContext sc = request.getSession().getServletContext();  

  9.     // 上传位置  

  10.     String uploadFilePath = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  11.     // 存储要下载的文件名  

  12.     Map<String, String> fileNameMap = new HashMap<String, String>();  

  13.     // 递归遍历filepath目录下的所有文件和目录,将文件的文件名存储到map集合中  

  14.     listfile(new File(uploadFilePath), fileNameMap);// File既可以代表一个文件也可以代表一个目录  

  15.     // 将Map集合发送到listfile.jsp页面进行显示  

  16.     request.setAttribute("fileNameMap", fileNameMap);  

  17.     return "listFile";  

  18. }  

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 

  2.  * 列出所有的图片 

  3.  */  

  4. @RequestMapping("/listFile")  

  5. public String listFile(HttpServletRequest request,  

  6.         HttpServletResponse response) {  

  7.     // 获取上传文件的目录  

  8.     ServletContext sc = request.getSession().getServletContext();  

  9.     // 上传位置  

  10.     String uploadFilePath = sc.getRealPath("/img") + "/"; // 设定文件保存的目录  

  11.     // 存储要下载的文件名  

  12.     Map<String, String> fileNameMap = new HashMap<String, String>();  

  13.     // 递归遍历filepath目录下的所有文件和目录,将文件的文件名存储到map集合中  

  14.     listfile(new File(uploadFilePath), fileNameMap);// File既可以代表一个文件也可以代表一个目录  

  15.     // 将Map集合发送到listfile.jsp页面进行显示  

  16.     request.setAttribute("fileNameMap", fileNameMap);  

  17.     return "listFile";  

  18. }  

(2)JSP文件listFile.jsp

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  

  2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

  3. <!DOCTYPE HTML>  

  4. <html>  

  5.   <head>  

  6.     <title>下载文件显示页面</title>  

  7.   </head>  

  8.     

  9.   <body>  

  10.       <!-- 遍历Map集合 -->  

  11.     <c:forEach var="me" items="${fileNameMap}">  

  12.         <c:url value="/file/downFile" var="downurl">  

  13.             <c:param name="filename" value="${me.key}"></c:param>  

  14.         </c:url>  

  15.         ${me.value}<href="${downurl}">下载</a>  

  16.         <br/>  

  17.     </c:forEach>   

  18.     

  19.   </body>  

  20. </html>  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  

  2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

  3. <!DOCTYPE HTML>  

  4. <html>  

  5.   <head>  

  6.     <title>下载文件显示页面</title>  

  7.   </head>  

  8.     

  9.   <body>  

  10.       <!-- 遍历Map集合 -->  

  11.     <c:forEach var="me" items="${fileNameMap}">  

  12.         <c:url value="/file/downFile" var="downurl">  

  13.             <c:param name="filename" value="${me.key}"></c:param>  

  14.         </c:url>  

  15.         ${me.value}<href="${downurl}">下载</a>  

  16.         <br/>  

  17.     </c:forEach>   

  18.     

  19.   </body>  

  20. </html>  


(3)运行后输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/listFile       

这些为刚刚上传到四张图片。

六、文件下载

(1)控制器

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @RequestMapping("/downFile")  

  2. public void downFile(HttpServletRequest request,  

  3.         HttpServletResponse response) {  

  4.     System.out.println("1");  

  5.     // 得到要下载的文件名  

  6.     String fileName = request.getParameter("filename");  

  7.     System.out.println("2");  

  8.     try {  

  9.         fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");  

  10.         System.out.println("3");  

  11.         // 获取上传文件的目录  

  12.         ServletContext sc = request.getSession().getServletContext();  

  13.         System.out.println("4");  

  14.         // 上传位置  

  15.         String fileSaveRootPath = sc.getRealPath("/img");   

  16.           

  17.         System.out.println(fileSaveRootPath + "\\" + fileName);  

  18.         // 得到要下载的文件  

  19.         File file = new File(fileSaveRootPath + "\\" + fileName);  

  20.           

  21.         // 如果文件不存在  

  22.         if (!file.exists()) {  

  23.             request.setAttribute("message", "您要下载的资源已被删除!!");  

  24.             System.out.println("您要下载的资源已被删除!!");  

  25.             return;  

  26.         }  

  27.         // 处理文件名  

  28.         String realname = fileName.substring(fileName.indexOf("_") + 1);  

  29.         // 设置响应头,控制浏览器下载该文件  

  30.         response.setHeader("content-disposition", "attachment;filename="  

  31.                 + URLEncoder.encode(realname, "UTF-8"));  

  32.         // 读取要下载的文件,保存到文件输入流  

  33.         FileInputStream in = new FileInputStream(fileSaveRootPath + "\\" + fileName);  

  34.         // 创建输出流  

  35.         OutputStream out = response.getOutputStream();  

  36.         // 创建缓冲区  

  37.         byte buffer[] = new byte[1024];  

  38.         int len = 0;  

  39.         // 循环将输入流中的内容读取到缓冲区当中  

  40.         while ((len = in.read(buffer)) > 0) {  

  41.             // 输出缓冲区的内容到浏览器,实现文件下载  

  42.             out.write(buffer, 0, len);  

  43.         }  

  44.         // 关闭文件输入流  

  45.         in.close();  

  46.         // 关闭输出流  

  47.         out.close();  

  48.     } catch (Exception e) {  

  49.   

  50.     }  

  51. }  

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @RequestMapping("/downFile")  

  2. public void downFile(HttpServletRequest request,  

  3.         HttpServletResponse response) {  

  4.     System.out.println("1");  

  5.     // 得到要下载的文件名  

  6.     String fileName = request.getParameter("filename");  

  7.     System.out.println("2");  

  8.     try {  

  9.         fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");  

  10.         System.out.println("3");  

  11.         // 获取上传文件的目录  

  12.         ServletContext sc = request.getSession().getServletContext();  

  13.         System.out.println("4");  

  14.         // 上传位置  

  15.         String fileSaveRootPath = sc.getRealPath("/img");   

  16.           

  17.         System.out.println(fileSaveRootPath + "\\" + fileName);  

  18.         // 得到要下载的文件  

  19.         File file = new File(fileSaveRootPath + "\\" + fileName);  

  20.           

  21.         // 如果文件不存在  

  22.         if (!file.exists()) {  

  23.             request.setAttribute("message", "您要下载的资源已被删除!!");  

  24.             System.out.println("您要下载的资源已被删除!!");  

  25.             return;  

  26.         }  

  27.         // 处理文件名  

  28.         String realname = fileName.substring(fileName.indexOf("_") + 1);  

  29.         // 设置响应头,控制浏览器下载该文件  

  30.         response.setHeader("content-disposition", "attachment;filename="  

  31.                 + URLEncoder.encode(realname, "UTF-8"));  

  32.         // 读取要下载的文件,保存到文件输入流  

  33.         FileInputStream in = new FileInputStream(fileSaveRootPath + "\\" + fileName);  

  34.         // 创建输出流  

  35.         OutputStream out = response.getOutputStream();  

  36.         // 创建缓冲区  

  37.         byte buffer[] = new byte[1024];  

  38.         int len = 0;  

  39.         // 循环将输入流中的内容读取到缓冲区当中  

  40.         while ((len = in.read(buffer)) > 0) {  

  41.             // 输出缓冲区的内容到浏览器,实现文件下载  

  42.             out.write(buffer, 0, len);  

  43.         }  

  44.         // 关闭文件输入流  

  45.         in.close();  

  46.         // 关闭输出流  

  47.         out.close();  

  48.     } catch (Exception e) {  

  49.   

  50.     }  

  51. }  


这里就是通过文件流的方式来下载图片的。

然后就可以自己选择下载的地方了。

终于讲完了,花了大半天啊!

posted @ 2018-10-30 10:51  霸气小青年  阅读(364)  评论(0编辑  收藏  举报