zoukankan      html  css  js  c++  java
  • 使用Spring MVC实现文件上传与下载

    前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统;但是还是没有找到自己想要的文件上传与下载的方式。

    今天看到一篇关于SpringMVC实现文件上传和下载的,以此做记录。

    一:基础配置

    maven导包 并 配置pom.xml,导入Spring mvc的基础依赖 和 文件上传下载用到的commons-io.jsr和commons-fileupload.jar:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
      <modelVersion>4.0.0</modelVersion>  
      <groupId>filLoadTest</groupId>  
      <artifactId>filLoadTest</artifactId>  
      <packaging>war</packaging>  
      <version>0.0.1-SNAPSHOT</version>  
      <name>filLoadTest Maven Webapp</name>  
      <url>http://maven.apache.org</url>  
       <build>  
        <finalName>filLoadTest</finalName>  
         <plugins>    
                <!-- 以下配置可以保证每次强制更新时jre版本不会变化,那我的eclipse4.4.1,maven3.2.5为例,如果不设置这个,每次强制更新时jre就会变回1.5 -->    
                <plugin>    
                    <artifactId>maven-compiler-plugin</artifactId>    
                    <version>2.3.2</version>    
                    <configuration>    
                        <source>1.7</source>    
                        <target>1.7</target>    
                        <encoding>UTF-8</encoding>    
                        <compilerArguments>    
                            <verbose />    
                            <bootclasspath>${java.home}lib
    t.jar</bootclasspath>    
                        </compilerArguments>    
                    </configuration>    
                </plugin>    
            </plugins>    
      </build>  
      <dependencies>  
        <dependency>  
          <groupId>junit</groupId>  
          <artifactId>junit</artifactId>  
          <version>3.8.1</version>  
          <scope>test</scope>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-webmvc</artifactId>  
            <version>4.0.6.RELEASE</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-annotations</artifactId>  
            <version>2.2.3</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-core</artifactId>  
            <version>2.2.3</version>  
        </dependency>  
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-databind</artifactId>  
            <version>2.2.3</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-fileupload</groupId>  
            <artifactId>commons-fileupload</artifactId>  
            <version>1.3.1</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.4</version>  
        </dependency>  
      </dependencies>  
    </project>  

    二:Web.xml基础配置

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        id="WebApp_ID" version="2.5">      
        <filter>  
            <description>字符集过滤器</description>  
            <filter-name>encodingFilter</filter-name>  
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
            <init-param>  
                <description>字符集编码</description>  
                <param-name>encoding</param-name>  
                <param-value>UTF-8</param-value>  
            </init-param>  
        </filter>  
        <filter-mapping>  
            <filter-name>encodingFilter</filter-name>  
            <url-pattern>/*</url-pattern>  
        </filter-mapping>  
        <servlet>    
            <servlet-name>springMVC</servlet-name>    
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
            <init-param>    
                <param-name>contextConfigLocation</param-name>    
                <param-value>classpath:spring.xml</param-value>    
            </init-param>      
        </servlet>    
        <servlet-mapping>    
            <servlet-name>springMVC</servlet-name>    
            <url-pattern>*.do</url-pattern>    
        </servlet-mapping>  
        <welcome-file-list>  
            <welcome-file>index.html</welcome-file>  
            <welcome-file>index.htm</welcome-file>  
            <welcome-file>index.jsp</welcome-file>  
            <welcome-file>default.html</welcome-file>  
            <welcome-file>default.htm</welcome-file>  
            <welcome-file>default.jsp</welcome-file>  
        </welcome-file-list>    
    </web-app>  

    三:spring配置spring.xml

    <?xml version="1.0" encoding="UTF-8"?>    
    <beans xmlns="http://www.springframework.org/schema/beans"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
        xmlns:context="http://www.springframework.org/schema/context"    
        xmlns:mvc="http://www.springframework.org/schema/mvc"      
        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  
            http://www.springframework.org/schema/mvc   
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">    
    
    
        <context:annotation-config />    
        <mvc:annotation-driven />  
        <context:component-scan base-package="controllers" />    
    
        <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->  
        <bean id="mappingJacksonHttpMessageConverter"  
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/html;charset=utf-8</value>  
                </list>  
            </property>  
        </bean>  
    
    
        <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
        <bean  
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
            <property name="messageConverters">  
                <list>  
                    <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->  
                </list>  
            </property>  
        </bean>  
    
        <!-- 支持上传文件 -->  
        <bean id="multipartResolver"  
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >  
            <!-- 100M -->  
            <property name="maxUploadSize" value="104857600"></property>      
            <property name="defaultEncoding" value="utf-8"></property>     
        </bean>  
    </beans>    

    四:文件上传代码

    上传的简单页面index.html,要注意form表单提交时的entype的设置:

    <!DOCTYPE html>  
    <html>  
    <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    </head>  
    <body>  
       <form action="./upLoadFile.do" method="post" enctype="multipart/form-data">  
                     选择文件:<input type="file" name="file"/>  
                     <input type="submit" value="提交"/>  
       </form>  
    </body>  
    </html>  

    上传页面对应的后台代码:

    import java.io.File;  
    import java.io.IOException;  
    import java.util.Iterator;  
    import javax.servlet.http.HttpServletRequest;  
    import org.apache.commons.io.FileUtils;  
    import org.springframework.http.HttpHeaders;  
    import org.springframework.http.HttpStatus;  
    import org.springframework.http.MediaType;  
    import org.springframework.http.ResponseEntity;  
    import org.springframework.stereotype.Controller;  
    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.CommonsMultipartResolver;  
    
    
    @Controller  
    public class fileController {  
    
    
        /** 
         * 文件上传 
         *  
         * @author:tuzongxun 
         * @Title: upLoadFile 
         * @param @param file 
         * @param @param request 
         * @param @throws IllegalStateException 
         * @param @throws IOException 
         * @return void 
         * @date Apr 28, 2016 1:22:00 PM 
         * @throws 
         */  
        @RequestMapping(value = "/upLoadFile.do", method = RequestMethod.POST)  
        public void upLoadFile(HttpServletRequest request)  
                throws IllegalStateException, IOException {  
            // @RequestParam("file") MultipartFile file,  
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(  
                    request.getSession().getServletContext());  
            // 判断 request 是否有文件上传,即多部分请求  
            if (multipartResolver.isMultipart(request)) {  
                // 转换成多部分request  
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;  
                // 取得request中的所有文件名  
                Iterator<String> iter = multiRequest.getFileNames();  
                while (iter.hasNext()) {  
                    // 取得上传文件  
                    MultipartFile f = multiRequest.getFile(iter.next());  
                    if (f != null) {  
                        // 取得当前上传文件的文件名称  
                        String myFileName = f.getOriginalFilename();  
                        // 如果名称不为“”,说明该文件存在,否则说明该文件不存在  
                        if (myFileName.trim() != "") {  
                            // 定义上传路径  
                            String path = "C:\Users\tuzongxun123\Desktop\"  
                                    + myFileName;  
                            File localFile = new File(path);  
                            f.transferTo(localFile);  
                        }  
                    }  
                }  
            }  
        }  
    }  

    原文地址:
    使用springMVC实现文件上传和下载之环境配置与上传

    五:文件下载

    文件下载需要获取下载文件的存储路径,这里只是手动填入,如果是在具体项目中,可以把文件名和上传后的存储路径保存在数据库中。然后增加一个文件列表的页面展示文件名和文件路径,然后点击下载的时候把相应的文件名和路径传到后台操作。

    /** 
         * 文件下载,需要文件名和文件地址 
         * 
         */  
        @RequestMapping(value = "/downLoadFile.do")  
        public ResponseEntity<byte[]> download(@RequestParam("name") String name,  
               @RequestParam("filePath") String path) throws IOException {  
           File file = new File(path);  
           HttpHeaders headers = new HttpHeaders();  
           String fileName = new String(name.getBytes("UTF-8"), "iso-8859-1");// 为了解决中文名称乱码问题  
           headers.setContentDispositionFormData("attachment", fileName);  
           headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);  
           return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),  
                  headers, HttpStatus.CREATED);  
        }  

    Html页面,这里只是简单的填写文件名和文件路径,用form表单提交到后台,然后后台会控制response在页面弹出保存文件路径的选择框,当然了,这里的后台我没有做什么处理,如果文件不存在是会报错的,可以进行相应的处理:

    文件下载:  
       </br> </br>  
       <form action="./downLoadFile.do"style="border:1px solid grey;auto;" method="post">  
               文件名:<input type="text" name="name"/></br></br>  
               文件路径:<input type="text" name="filePath"/></br></br>  
               <input type="submit" value="确认下载"/>  
       </form>  

    使用springMVC实现文件上传和下载之文件下载

  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/aixing/p/13327557.html
Copyright © 2011-2022 走看看