springboot上传文件大小限制_bootstrap文件上传

springboot上传文件大小限制_bootstrap文件上传总结:需要注意的点是使用CommonsMultipartResolver解析器的时候,我们需要关闭Spring Boot上传文件配置,当然也可以通过其他途径去关闭Spring Boot的StandardServletMultipartResolver组件,比如在项目的启动器中去…

本文介绍Spring Boot上传文件的两种形式,一种是解析方式是StandardServletMultipartResolver,它是基于Servlet3.0的,所以不需要依赖其他jar包,另一个组件是CommonsMultipartResolver,使用它需要额外引用其它jar包,如想了解,请继续往下看:

  • 公共引用方法:
private final static String PATH = "/data/files/";

private File buildDirectory() {
    File directory = new File(PATH);
    if (!directory.exists() || !directory.isDirectory()) {
        directory.mkdirs();
    }
    return directory;
}

private void upload(MultipartFile multipartFile, File directory) {
    File file = new File(PATH + multipartFile.getOriginalFilename());
    String filename = multipartFile.getOriginalFilename();
    //实际项目中可能会上传重名文件,但内容可能不一致,所以我们需要重置文件名称,否则原文件将丢失
    if (file.exists()) {
        filename = System.currentTimeMillis() + filename;
    }
    try {
        multipartFile.transferTo(new File(directory, filename));
    } catch (IOException e) {
        log.error("上次文件失败", e);
        throw new RuntimeException("上次文件失败");
    }
}
  • StandardServletMultipartResolver: 配置文件:
spring:
  servlet:
    multipart:
      enabled: true
      location: /data/
      max-file-size: 1MB
      max-request-size: 5MB
      resolve-lazily: false
      file-size-threshold: 0
		enabled:开启上传文件配置;
		location:文件上传临时保存位置,没有写入最终保存位置时存放的位置;
		max-file-size:上传单个文件最大大小;
		max-request-size:上传一组文件最大大小;
		resolve-lazily:是否延迟解析,相当于懒加载;
		file-size-threshold:文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,默认为0

	上传文件Java实现:
@PostMapping("/standardServletMultipartResolver")
public String standardServletMultipartResolver(@RequestParam(name = "file") MultipartFile[] multipartFiles) {
    Assert.isTrue(multipartFiles != null && multipartFiles.length > 0, "请选择文件");
    //获取保存文件磁盘的文件夹,如果不存在则创建
    File directory = buildDirectory();
    for (int i = 0; i < multipartFiles.length; i++) {
        upload(multipartFiles[i], directory);
    }
    return "上传成功!";
}
 测试: 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/demo/file/standardServletMultipartResolver" method="post" enctype="multipart/form-data" target="frameName">
    <!-- multiple属性表示可上次多个文件 -->
    <input type="file" name="files" value="选择文件" multiple>
    <input type="submit" value="上传">
</form>
<!-- 提交成功后停留在原页面 -->
<iframe src="" frameborder="0" name="frameName"></iframe>
</body>
</html>
  • CommonsMultipartResolver: 配置文件:
spring:
  servlet:
    multipart:
      enabled: false
      location: /data/
      max-file-size: 1MB
      max-request-size: 5MB
      resolve-lazily: false
      file-size-threshold: 0
 依赖: 
<commons.fileupload>1.3.3</commons.fileupload>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>${commons.fileupload}</version>
</dependency>
 Java实现: 
@PostMapping("/commonsMultipartResolver")
public String commonsMultipartResolver(HttpServletRequest request) {
    List<MultipartFile> multipartFiles = getFormMultipartFile(request);
    Assert.isTrue(multipartFiles != null && multipartFiles.size() > 0, "请选择需要上传的文件");
    File directory = buildDirectory();
    multipartFiles.stream().forEach(multipartFile -> {
        upload(multipartFile, directory);
    });
    return "上传成功";
}

private List<MultipartFile> getFormMultipartFile(HttpServletRequest request) {
    //将当前上下文初始化给CommonsMutipartResolver多部分解析器)
    MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
    //检查form中是否有enctype="multipart/form-data"
    if (resolver.isMultipart(request)) {
        //键名是form表单中上传文件控件的name值
        return multipartRequest.getFiles("files");
    }
    return null;
}
测试代码就不再重复了,和上面的html代码一致,将提交路径更改一下就行了。
  • 总结:需要注意的点是使用CommonsMultipartResolver解析器的时候,我们需要关闭Spring Boot上传文件配置,当然也可以通过其他途径去关闭Spring Boot的StandardServletMultipartResolver组件,比如在项目的启动器中去排除等。个人建议使用StandardServletMultipartResolver,简单、方便,无需添加其它依赖,你们觉得呢?

如有不到之处,欢迎各位留言指正,不慎感激。 更多文章: 点击跳转CSDN博客 点击跳转简书博客 公众号:代码小搬运

扫码关注代码小搬运公众号

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

(0)

相关推荐

  • centos7u盘安装_mips 龙芯

    centos7u盘安装_mips 龙芯UOS 20(统一操作系统)的安装方法同样适用于深之度的Deepin V20和Debian 10 Buster 一、安装数据库 sudo apt install mariadb-server 二、初…

    2022-12-23
    149
  • idea切换窗口快捷键_idea前进和后退快捷键

    idea切换窗口快捷键_idea前进和后退快捷键当我写这篇文章的时候,想起来 N 年前一件往事,我一不小心删除了一个刚刚写好的页面,又气又恼,后来趁着还有印象默默的花了半个多小时又重写了一遍,那个时候要是知道 IDEA 中这个功能该有多好呀! 今天

    2023-08-19
    127
  • mysql数据库面试题基础知识_经典面试题

    mysql数据库面试题基础知识_经典面试题1. MySQL 索引使用有哪些注意事项呢? like通配符可能导致索引失效。 联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。 在索引列上使用mysql的内置函数,索引失效。 对索引列运算(如,+、-、*、/),索引失效。 索引字段上使用(!= 或者 < >,no…

    2023-04-02
    149
  • Python读取大文件的方法

    Python读取大文件的方法自从大数据时代到来以后,我们面临之一的最大的问题就是处理大规模数据。同时,面对各种海量文件,我们也需要尽可能高效地读取和管理这些文件。本文将介绍Python读取大型数据的相关技术和方法,希望能够帮助到大家。

    2024-08-30
    32
  • Python开发工程师 | 使用Spyder | 设置中文为默认语言

    Python开发工程师 | 使用Spyder | 设置中文为默认语言作为一名Python开发工程师,你是否在寻找一款兼具IDE与文本编辑器的Python集成开发环境呢?本文将介绍一款名为Spyder的Python集成开发环境,同时探讨如何在Spyder中设置中文为默认语言。

    2024-06-19
    51
  • Valentina Studio Pro for Mac(数据库管理软件) v10.1.1「建议收藏」

    Valentina Studio Pro for Mac(数据库管理软件) v10.1.1「建议收藏」Valentina Studio Pro for Mac支持连接所有主要数据库,可以帮助用户轻松创建、管理、查询和浏览Valentina DB、MySQL、MariaDB、PostgreSQL和SQ…

    2023-02-14
    158
  • 《推荐系统实践》pdf「建议收藏」

    《推荐系统实践》pdf「建议收藏」随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载(information overload)的时代 。在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:对于信息消费者,从大量信息中找到自己感兴趣的信息是一件非常困难的事情;对于信息生产者,让自己生产…

    2023-08-20
    118
  • 重新认识MySQL中的COUNT语句

    重新认识MySQL中的COUNT语句在数据库的增删改查操作中,使用最频繁的就是查询操作。 而在所有查询操作中,统计数量操作更是经常被用到。 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数…

    2022-12-16
    143

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注