微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC8------ 实用技术(1)文件上传下载

文件上传下载

image-20211005152510918

文件上传选择实现

image-20211005153851680

  • pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.yy</groupId>
      <artifactId>springmvc_fileupload</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <dependencies>
        <!-- servlet3.0规范的坐标 -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
        <!--jsp坐标-->
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.1</version>
          <scope>provided</scope>
        </dependency>
        <!--spring的坐标-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
        <!--springmvc的坐标-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.1.9.RELEASE</version>
        </dependency>
    
        <!--文件上传下载-->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.4</version>
        </dependency>
      </dependencies>
    
      <build>
        <!--设置插件-->
        <plugins>
          <!--具体的插件配置-->
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <port>80</port>
              <path>/</path>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    
  • 上传文件的jsp页面

    <%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %>
    
    <form action="/fileupload" method="post" enctype="multipart/form-data">
        <%--文件上传表单的name属性值一定要与controller处理器中方法的参数对应,否则无法实现文件上传--%>
        上传logo:<input type="file" name="file"/><br/>
        上传照片:<input type="file" name="file1"/><br/>
        上传任意文件:<input type="file" name="file2"/><br/>
        <input type="submit" value="上传"/>
    </form>
    
  • page.jsp

    <%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %>
    <h1>测试文件上传下载功能!</h1>
    
  • web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:spring-mvc.xml</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
    
  • spring-mvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <mvc:annotation-driven/>
    
        <context:component-scan base-package="com.itheima"/>
    
        <!--
    	配置文件上传处理器
    	CommonsMultipartResolver是专门用来进行文件上传和下载的东西
    	这里面的id必须叫multipartResolver
    	-->
    	
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!--value是一次上传的最大的大小-->
    		<property name="maxUploadSize" value="1024000000"/>
        </bean>
    
    </beans>
    
  • FileUploadController.java文件上传的controller

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.multipartfile;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.IOException;
    
    @Controller
    public class FileUploadController {
    
        @RequestMapping(value = "/fileupload")
        //参数中定义multipartfile参数,用于接收页面提交的type=file类型的表单,要求表单名称与参数名相同
        public String fileupload(multipartfile file,multipartfile file1,multipartfile file2, HttpServletRequest request) throws IOException {
            System.out.println("file upload is running ..."+file);
    //        multipartfile参数中封装了上传文件的相关信息
    //        System.out.println(file.getSize());//6203,文件保存时占的硬盘空间大小,字节单位
    //        System.out.println(file.getBytes().length);
    //如果是file.getBytes()返回[B@30006a6b,是一个byte数组,这就是里面所有的数据
    //如果是file.getBytes().length返回的是6203
    //        System.out.println(file.getContentType());//image/png,返回的是文件类型
    //        System.out.println(file.getName());//file,这个不是文件名是file(也就是multipartfile file),这个名称对我们的意义不是很大
    //        System.out.println(file.getoriginalFilename());//logo.png,这个才是真正的文件名,是一个字符串
    //        System.out.println(file.isEmpty());//false,是不是一个文件
            //首先判断是否是空文件,也就是存储空间占用为0的文件
            if(!file.isEmpty()){
                //如果大小在范围要求内正常处理,否则抛出自定义异常告知用户(未实现)
                //获取原始上传文件名,可以作为当前文件的真实名称保存到数据库中备用
                String fileName = file.getoriginalFilename();
                //设置保存的路径,获取/images的路径名
                String realPath = request.getServletContext().getRealPath("/images");
                //保存文件方法,指定保存的位置和文件名即可,通常文件名使用随机生成策略产生,避免文件名冲突问题
                file.transferTo(new File(realPath,file.getoriginalFilename()));
            }
            //测试一次性上传多个文件
            if(!file1.isEmpty()){
                String fileName = file1.getoriginalFilename();
                //可以根据需要,对不同种类的文件做不同的存储路径的区分,修改对应的保存位置即可
                String realPath = request.getServletContext().getRealPath("/images");
                file1.transferTo(new File(realPath,file1.getoriginalFilename()));
            }
            if(!file2.isEmpty()){
                String fileName = file2.getoriginalFilename();
                String realPath = request.getServletContext().getRealPath("/images");
                file2.transferTo(new File(realPath,file2.getoriginalFilename()));
            }
            return "page.jsp";
        }
    }
    
    

服务器上传文件注意事项

image-20211005154225487

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐