
文件上传下载是 Web 项目中的高频需求——用户头像、合同附件、产品图片。这篇讲 SpringBoot 中文件上传下载的完整实现包含单文件、多文件、大文件分片上传等场景。一、配置1. 文件上传配置spring:servlet:multipart:enabled:truemax-file-size:10MB# 单个文件最大max-request-size:50MB# 总请求最大file-size-threshold:2KB# 文件大小阈值location:/tmp2. 文件存储配置ConfigurationConfigurationProperties(prefixfile)DatapublicclassFileStorageConfig{privateStringuploadDir/data/uploads;privateStringdownloadUrl/files;}二、单文件上传RestControllerRequestMapping(/file)publicclassFileController{AutowiredprivateFileStorageConfigconfig;PostMapping(/upload)publicResultVOStringupload(RequestParam(file)MultipartFilefile){if(file.isEmpty()){returnResultVO.error(400,请选择文件);}try{// 1. 生成存储文件名StringoriginalNamefile.getOriginalFilename();StringextoriginalName.substring(originalName.lastIndexOf(.));StringsaveNameIdUtil.simpleUUID()ext;// 2. 按日期分目录StringdatePathDateUtil.today();FiledirnewFile(config.getUploadDir(),datePath);if(!dir.exists())dir.mkdirs();// 3. 保存文件FiledestnewFile(dir,saveName);file.transferTo(dest);// 4. 返回可访问路径Stringurlconfig.getDownloadUrl()/datePath/saveName;returnResultVO.success(url);}catch(IOExceptione){returnResultVO.error(500,上传失败);}}}三、多文件上传PostMapping(/uploads)publicResultVOListStringuploadMultiple(RequestParam(files)MultipartFile[]files){ListStringurlsnewArrayList();for(MultipartFilefile:files){// 逐个上传urls.add(upload(file));}returnResultVO.success(urls);}四、文件下载GetMapping(/download/{datePath}/{fileName})publicvoiddownload(PathVariableStringdatePath,PathVariableStringfileName,HttpServletResponseresponse){FilefilenewFile(config.getUploadDir(),datePath/fileName);if(!file.exists()){response.setStatus(404);return;}response.setContentType(application/octet-stream);response.setHeader(Content-Disposition,attachment;filenameURLEncoder.encode(fileName,UTF-8));Files.copy(file.toPath(),response.getOutputStream());} 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。