案例14 Spring MVC文件上传案例

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 基于Spring MVC实现文件上传:使用commons-fileupload实现上传文件到本地目录。实现上传文件到阿里云OSS和从阿里云OSS下载文件到本地。

 基于Spring MVC实现文件上传:

    1. 使用commons-fileupload实现上传文件到本地目录。
    2. 实现上传文件到阿里云OSS和从阿里云OSS下载文件到本地。

    1. 创建项目

    选择Maven快速构建web项目,项目名称为case14-springmvc03。


    2. 配置Maven依赖

    <?xmlversion="1.0" encoding="UTF-8"?><projectxmlns="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.wfit.springmvc</groupId><artifactId>springmvc02</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><!--spring mvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.8</version></dependency><!--servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--fileupload--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!--aliyun-sdk-oss--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency></dependencies></project>


    3. 创建Spring MVC配置文件

    src.main.resources目录下创建spring-mvc.xml。

    <?xmlversion="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--开启注解--><context:component-scanbase-package="com.wfit"/><!--启用mvc--><mvc:annotation-driven></mvc:annotation-driven><!--文件上传解析器--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--设置上传大小 最大1M--><propertyname="maxUploadSize"value="1048576"/></bean></beans>


    4. 配置web.xml

    <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><!--解决POST中文乱码问题 过滤器--><filter><filter-name>encodingFilter</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>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置前端控制器DispatcherServlet--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载SpringMVC文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!--启动容器时加载servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!--表示拦截所有请求--><url-pattern>/</url-pattern></servlet-mapping></web-app>


    5. 创建UploadController类

    在src.main.java.com.wfit.upload目录下创建UploadController类,实现文件上传。

    @Controller@RequestMapping("/upload")
    publicclassUploadController {
    /*** 文件上传* @param file* @return*/@PostMapping("/upload")
    @ResponseBodypublicStringupload(MultipartFilefile) throwsIOException {
    //验证文件是否为空if(ObjectUtils.isEmpty(file) ||file.getSize() <=0){
    return"file is empty";
            }
    //创建上传文件位置FileuploadDir=newFile("D:\\upload");
    //获取文件名StringfileName=file.getOriginalFilename();
    //创建目标文件FiledesFile=newFile(uploadDir,fileName);
    //执行上传操作file.transferTo(desFile);
    return"success";
        }
    }


    6. 创建OssController类

    在src.main.java.com.wfit.upload目录下创建OssController类,实现上传文件到阿里云OSS和从阿里云OSS下载文件到本地。

    @Controller@RequestMapping("/oss")
    publicclassOssController {
    //访问OSS的域名privatestaticStringendpoint="oss-cn-beijing.aliyuncs.com";
    //accessKeyId和accessKeySecret是OSS的访问密钥privatestaticStringaccessKeyId="<yourAccessKeyId>";
    privatestaticStringaccessKeySecret="<yourAccessKeySecret>";
    //Bucket用来管理所存储Object的存储空间privatestaticStringbucketName="<yourBucketName>";
    //目标文件privatestaticStringobjectName="upload/123.txt";
    /*** 上传文件到阿里云OSS* @return*/@PostMapping("/upload")
    @ResponseBodypublicStringupload(MultipartFilefile) throwsIOException {
    //验证文件是否为空if(ObjectUtils.isEmpty(file) ||file.getSize() <=0){
    return"file is empty";
            }
    InputStreaminputStream=file.getInputStream();
    // 创建OSSClient实例OSSossClient=newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    try {
    // 创建PutObjectRequest对象PutObjectRequestputObjectRequest=newPutObjectRequest(bucketName, objectName, inputStream);
    // 设置该属性可以返回response。如果不设置,则返回的response为空putObjectRequest.setProcess("true");
    // 创建PutObject请求PutObjectResultresult=ossClient.putObject(putObjectRequest);
    // 如果上传成功,则返回200System.out.println(result.getResponse().getStatusCode());
            } catch (Exceptione) {
    System.out.println("Error Message:"+e.getMessage());
            } 
    return"success";
        }
    /*** 下载阿里云文件到本地* @return*/@PostMapping("/download")
    @ResponseBodypublicStringdownload(StringobjName,Stringpath) throwsIOException {
    //下载目录StringpathName="download/123.txt";
    // 创建OSSClient实例OSSossClient=newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    try {
    // 下载Object到本地文件,并保存到指定的本地路径中ossClient.getObject(newGetObjectRequest(bucketName, objectName), newFile(pathName));
            } catch (Exceptione) {
    System.out.println("Error Message:"+e.getMessage());
            }
    return"success";
        }
    }


    7. Postman执行上传文件到本地目录


    8. Postman执行上传到阿里云OSS


    9. Postman执行从阿里云OSS下载文件到本地



    相关实践学习
    借助OSS搭建在线教育视频课程分享网站
    本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
    目录
    相关文章
    |
    22天前
    |
    设计模式 前端开发 Java
    步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
    通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
    38 4
    |
    2月前
    |
    前端开发 Java 开发者
    Spring MVC中的请求映射:@RequestMapping注解深度解析
    在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
    153 2
    |
    2月前
    |
    Java Maven Spring
    Spring 小案例体验创建对象的快感
    本文介绍了如何在IDEA中创建一个Spring项目,包括项目创建、配置pom.xml文件以引入必要的依赖、编写实体类HelloSpring及其配置文件applicationContext.xml,最后通过测试类TestHelloSpring展示如何使用Spring的bean创建对象并调用方法。
    40 0
    |
    3月前
    |
    JSON 前端开发 Java
    SSM:SpringMVC
    本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
    |
    4月前
    |
    缓存 前端开发 Java
    【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
    Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
    |
    3月前
    |
    前端开发 Java 应用服务中间件
    【Spring】Spring MVC的项目准备和连接建立
    【Spring】Spring MVC的项目准备和连接建立
    67 2
    |
    3月前
    |
    XML 前端开发 Java
    Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
    本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
    239 0
    Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
    |
    4月前
    |
    XML 缓存 前端开发
    springMVC02,restful风格,请求转发和重定向
    文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
    springMVC02,restful风格,请求转发和重定向
    |
    3月前
    |
    前端开发 Java
    【案例+源码】详解MVC框架模式及其应用
    【案例+源码】详解MVC框架模式及其应用
    218 0
    |
    5月前
    |
    Java 数据库连接 Spring
    后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
    文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
    后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】