java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot文件上传与下载

SpringBoot实现文件上传与下载的完整指南(单文件、多文件、大文件分片)

作者:张老师技术栈

文件上传下载是 Web 项目中的高频需求——用户头像、合同附件、产品图片,这篇讲 SpringBoot 中文件上传下载的完整实现,包含单文件、多文件、大文件分片上传等场景,需要的朋友可以参考下

文件上传下载是 Web 项目中的高频需求——用户头像、合同附件、产品图片。这篇讲 SpringBoot 中文件上传下载的完整实现,包含单文件、多文件、大文件分片上传等场景。

一、配置

1. 文件上传配置

spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 10MB        # 单个文件最大
      max-request-size: 50MB     # 总请求最大
      file-size-threshold: 2KB   # 文件大小阈值
      location: /tmp

2. 文件存储配置

@Configuration
@ConfigurationProperties(prefix = "file")
@Data
public class FileStorageConfig {
    private String uploadDir = "/data/uploads";
    private String downloadUrl = "/files";
}

二、单文件上传

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileStorageConfig config;

    @PostMapping("/upload")
    public ResultVO<String> upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return ResultVO.error(400, "请选择文件");
        }

        try {
            // 1. 生成存储文件名
            String originalName = file.getOriginalFilename();
            String ext = originalName.substring(originalName.lastIndexOf("."));
            String saveName = IdUtil.simpleUUID() + ext;

            // 2. 按日期分目录
            String datePath = DateUtil.today();
            File dir = new File(config.getUploadDir(), datePath);
            if (!dir.exists()) dir.mkdirs();

            // 3. 保存文件
            File dest = new File(dir, saveName);
            file.transferTo(dest);

            // 4. 返回可访问路径
            String url = config.getDownloadUrl() + "/" + datePath + "/" + saveName;
            return ResultVO.success(url);
        } catch (IOException e) {
            return ResultVO.error(500, "上传失败");
        }
    }
}

三、多文件上传

@PostMapping("/uploads")
public ResultVO<List<String>> uploadMultiple(
        @RequestParam("files") MultipartFile[] files) {
    List<String> urls = new ArrayList<>();
    for (MultipartFile file : files) {
        // 逐个上传
        urls.add(upload(file));
    }
    return ResultVO.success(urls);
}

四、文件下载

@GetMapping("/download/{datePath}/{fileName}")
public void download(@PathVariable String datePath,
                     @PathVariable String fileName,
                     HttpServletResponse response) {
    File file = new File(config.getUploadDir(), datePath + "/" + fileName);
    if (!file.exists()) {
        response.setStatus(404);
        return;
    }
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition",
        "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

    Files.copy(file.toPath(), response.getOutputStream());
}

到此这篇关于SpringBoot实现文件上传与下载的完整指南(单文件、多文件、大文件分片)的文章就介绍到这了,更多相关SpringBoot文件上传与下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文