功能概述第一步、引入 Maven 依赖


    org.springframework.boot
    spring-boot-starter-web


    cn.hutool
    hutool-all
    ${hutool.version}

文件上传功能真正需要的依赖只有spring-boot-starter-web传文件,hutool-all只是笔者平时习惯使用的一个工具类库。如果你还不了解hutool-all推荐你花点时间了解一下,很香!如官网所讲“Hutool中的工具方法来自每个用户的精雕细琢”,它能大大提高你的开发效率。

第二步,配置

# 端口号
server.port=9090
# 开启文件上传
spring.servlet.multipart.enabled=true
# 上传文件默认存储路径(文件夹)
spring.servlet.multipart.location=E:/learn-springboot-upload/upload-files
# 限制单个文件最大大小
spring.servlet.multipart.max-file-size=1MB
# 限制所有文件最大大小
spring.servlet.multipart.max-request-size=10MB

注释写得很详细了,不多说。

第三步、上传逻辑实现

局域网传文件工具_传文件_qq传文件传一半不动了

1 上传文件重新命名,新的文件名格式如下:

private static final String FILE_NAME_PATTERN = "{}_{}";

第一个{}放的是上传时间,格式是yyyyMMddHHmmss,精确到秒。

第二个{}放的是上传文件的原始文件名。

2 方式一:使用org.springframework.web.multipart.MultipartFile接收上传文件

@RequestMapping("/upload/multipart")
public Object uploadMultipart(MultipartFile file) {
    // 上传文件的原始文件名
    String originalFilename = file.getOriginalFilename();
    log.info("上传文件的原始文件名:{}", originalFilename);
    // 文件名:日期_原始文件名
    String fileName = StrUtil.format(FILE_NAME_PATTERN, DateUtil.format(new Date(), "yyyyMMddHHmmss"), originalFilename);
    log.info("格式化后的文件名:{}", fileName);
    File dest = new File(fileName);
    try {
        file.transferTo(dest);
    } catch (IOException e) {
        log.info("上传文件失败!", e);
        return result(500, "上传失败!");
    }
    return result(200, "上传成功!");
}

3 方式二:使用javax.servlet.http.Part接收上传文件

@RequestMapping("/upload/part")
public Object uploadPart(Part file) {
    String originalFilename = file.getSubmittedFileName();
    log.info("上传文件的原始文件名:{}", originalFilename);
    // 文件名:日期_原始文件名
    String fileName = StrUtil.format(FILE_NAME_PATTERN, DateUtil.format(new Date(), "yyyyMMddHHmmss"), originalFilename);
    log.info("格式化后的文件名:{}", fileName);
    try {
        file.write(fileName);
    } catch (IOException e) {
        log.info("上传文件失败!", e);
        return result(500, "上传失败!");
    }
    return result(200, "上传成功!");
}

如果你没有自定义 MultipartResolver 对象,Spring Boot 会为你自动创建 MultipartResolver 对象,实际为 StandardServletMultipartResolver 。

如果上传的单个文件的大小超出限制,会报如下错误:

The field file exceeds its maximum permitted size of 1048576 bytes.

其中 1048576 是我设置的单个文件最大大小限制。

第四步、测试接口

我为了省时间传文件,并没有写 HTML 页面去测试接口,使用的是 Postman 工具测试接口。

局域网传文件工具_传文件_qq传文件传一半不动了

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击网站首页每天更新
站 长 微 信: aiwo51889