zoukankan      html  css  js  c++  java
  • springboot文件上传

    springboot文件上传

    来源:https://blog.lqdev.cn/2018/08/07/springboot/chapter-seventeen/

    我们知道,前端上传文件时,最常见的就是利用Form表单的方式进行文件的上传功能了,上传时设置enctypemultipart/form-data,或者直接利用jquery的一些上传插件实现。而后端,在jsp+Servlet时代,最常见的就是利用smartupload上传组件。而在SpringMvc时代,其提供了MultipartFile封装类,它包含了文件的二进制流和文件相关属性(文件名、大小等)。所以在SpringBoot中也是使用此封装类进行文件上传的。

    MultipartFile是个接口类,它的实现类有CommonsMultipartFileStandardMultipartFile

    • StandardMultipartFile:是基于j2ee自带的文件上传进行解析,即使用Servlet3.0提供的javax.servlet.http.Part上传方式。

    • CommonsMultipartFile:是基于apache fileupload的解析。

    所以正常我们使用时,也是无需关系底层是以哪种方式进行文件上传处理的,SpringMvc会给我们做相应的转换的。

    基于J2EE自带方式

    这种方式下,其实无需任何配置。只需按正常的web开发项目集成即可。

    # 最大支持文件大小 即单个文件大小
    spring.http.multipart.max-file-size=1Mb
    # 最大支持请求大小 即一次性上传的总文件大小
    spring.http.multipart.max-request-size=10Mb
    
    @RestController
    @Slf4j
    public class FileUploadController {
     
        @PostMapping("/upload")
        public String upload(@RequestParam MultipartFile file) throws IllegalStateException, IOException {
            // 判断是否为空文件
            if (file.isEmpty()) {
                return "上传文件不能为空";
            }
            // 文件类型
            String contentType = file.getContentType();
            // springmvc处理后的文件名
            String fileName = file.getName();
            log.info("服务器文件名:" + fileName);
            // 原文件名即上传的文件名
            String origFileName = file.getOriginalFilename();
            // 文件大小
            Long fileSize = file.getSize();
     
            // 保存文件
            // 可以使用二进制流直接保存
            // 这里直接使用transferTo
            file.transferTo(new File("d://okong-" + origFileName));
     
            return String.format(file.getClass().getName() + "方式文件上传成功!
    文件名:%s,文件类型:%s,文件大小:%s", origFileName, contentType,fileSize);
     
        }
    }
    

    基于FileUpload包方式

    原来在Springmvc时,我们通常都是使用CommonsMultipartResolver进行文件上传处理类配置的,比如最大上传文件大小的。而基于在SpringBoot下,略微有些不同。

    • 加入fileUpload依赖
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.3</version>
    </dependency>
    
    • 编写一个配置类 FileUploadConfig.java
    @Configuration
    public class FileUploadConfig {
     
        @Bean
        public MultipartResolver custom() {
            return new CommonsMultipartResolver();
        }
    }
    

    由于spring.http.multipart.enabled默认是true,所以加载类MultipartAutoConfiguration会自动加载,这样fileUpload就会异常了。

    • 方法1:在启动类下将此配置类不进行自动加载 :
    @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
    
    • 方法2:直接设置spring.http.multipart.enabled为false。
    spring.http.multipart.enabled=false
    
    • 测试

    使用方法和上一个一样

    @RestController
    @Slf4j
    public class FileUploadController {
     
        @PostMapping("/upload")
        public String upload(@RequestParam MultipartFile file) throws IllegalStateException, IOException {
            // 判断是否为空文件
            if (file.isEmpty()) {
                return "上传文件不能为空";
            }
            // 文件类型
            String contentType = file.getContentType();
            // springmvc处理后的文件名
            String fileName = file.getName();
            log.info("服务器文件名:" + fileName);
            // 原文件名即上传的文件名
            String origFileName = file.getOriginalFilename();
            // 文件大小
            Long fileSize = file.getSize();
     
            // 保存文件
            // 可以使用二进制流直接保存
            // 这里直接使用transferTo
            file.transferTo(new File("d://okong-" + origFileName));
     
            return String.format(file.getClass().getName() + "方式文件上传成功!
    文件名:%s,文件类型:%s,文件大小:%s", origFileName, contentType,fileSize);
     
        }
    }
    
  • 相关阅读:
    database backup scripts
    RMAN笔记之备份集和备份片
    数据缓冲区详解
    Oracle数据库中快照的使用
    linux 安装RabbitMQ 注意版本
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    Oracle alert日志中出现:‘Fatal NI connect error 12170’
    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区
    python基础: String类型
    Python3 urllib模块的使用(转载)
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/10341062.html
Copyright © 2011-2022 走看看