zoukankan      html  css  js  c++  java
  • SSM框架-SpringMVC 实例文件上传下载

     

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

     分类:
     

    目录(?)[+]

     

    目录(?)[+]

      林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

    本文详细讲解了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.pluginsorg.eclipse.wst.server.core mp0wtpwebappsSpringMVCLearningChapter4_1img/4eafc28c-4baa-4018-ac06-c4a5aec88d6cChrysanthemum.jpg

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

    来看看服务器的路径:E:workspace.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebappsSpringMVCLearningChapter4_1img

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

    方法二:

    使用文件流的方式来上传

    [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.pluginsorg.eclipse.wst.server.core mp0wtpwebappsSpringMVCLearningChapter4_1img/2baccc77-43b6-4908-859d-507e86a04051Desert.jpg
    原始文件名:Hydrangeas.jpg
    上传图片到:E:workspace.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebappsSpringMVCLearningChapter4_1img/51ad04e0-82aa-4b2c-958d-f00651e9ed6bHydrangeas.jpg
    原始文件名:Jellyfish.jpg
    上传图片到:E:workspace.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebappsSpringMVCLearningChapter4_1img/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. }  

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

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

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

    本文工程免费下载
     
     
  • 相关阅读:
    如何进行有效沟通避免出现误会
    如何进行有效沟通
    怎样提高自己的团队合作能力
    javaScript简介
    css文本格式详解
    css简介及相关概念
    WebGL10---3D模型的加载与使用
    Canvas绘图与动画详解
    Canvas绘制时钟
    WebGL9----将canvas作为纹理,将动画作为纹理(2)
  • 原文地址:https://www.cnblogs.com/liuyingke/p/7531364.html
Copyright © 2011-2022 走看看