Spring Boot 中的文件上传 以及 多文件上传

Spring Boot 相对于 MVC,简化了文件上传的步骤。它自带提供了 MultipartResolver 来管理文件上传,以下就来看一个最简单的例子:

upload.html

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="targetFile" value="Select your file: ">
  <input type="submit" value="Upload">
</form>

FileUploadController.java

@RestController
public class FileUploadController {

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");

    @PostMapping("/upload")
    public String upload(MultipartFile targetFile, HttpServletRequest request) {

        // 1. 构建保存上传文件的文件夹位置,并采用日期格式分别管理 (.../uploadFile/yyyy/mm/dd/...)
        String rootFolderPath = request.getSession().getServletContext().getRealPath("/uploadFile/");
        String formattedDate = simpleDateFormat.format(new Date());
        File folder = new File(rootFolderPath + formattedDate);

        // 2. 文件夹不存在时,创建它
        if (!folder.isDirectory())
            folder.mkdirs();

        System.out.println(targetFile);

        // 3. 采用 UUID 重命名文件,以避免重名覆盖
        String originalFilename = targetFile.getOriginalFilename();
        String newFilename = UUID.randomUUID().toString()
                + originalFilename.substring(originalFilename.lastIndexOf("."));

        // 4. 进行文件上传,并回传文件访问地址
        try {
            targetFile.transferTo(new File(folder, newFilename));
            String urlPath = request.getScheme() + "://"
                    + request.getServerName() + ":"
                    + request.getServerPort()
                    + "/uploadFile/" + formattedDate + newFilename;
            return urlPath;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "Upload failed!";
    }
}

然而实际上,真正负责上传的代码只有一行:

targetFile.transferTo(new File(folder, newFilename));

多文件上传

多文件上传与单文件上传基本上是一样的,不一样的地方有两点。其一,在 html 中的 <input> 上传标签中需要做添加一个 multiple 属性:

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="targetFiles" value="Select your file: " multiple>
  <input type="submit" value="Upload2">
</form>

第二点,Controller 需要写一个循环,来遍历这些文件,其它都与第一种方法一样:

@PostMapping("/upload")
public String upload(MultipartFile[] targetFiles, HttpServletRequest request) {
  for (MultipartFile targetFile : targetFiles)
    ...
   ...
}

以下是一些有关于上传的常用配置:

spring:
  servlet:
    multipart:
      enabled: true
      file-size-threshold: 0
      location: /tmp/java_tmp
      max-file-size: 50MB
      max-request-size: 50MB
      resolve-lazily: false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值