JavaWeb文件上传下载核心是安全处理HTTP请求响应、合理管理存储路径;Spring Boot推荐用MultipartFile上传,ResponseEntity或流式输出下载,需校验空文件、重命名、限大小、防路径遍历、内容类型匹配及前后端协同校验。
JavaWeb 中实现文件上传下载,核心在于正确处理 HTTP 请求与响应、合理管理服务器端存储路径,并兼顾安全性与用户体验。Spring Boot 项目中推荐使用 MultipartFile 简化上传,用 ResponseEntity 或流式输出控制下载,避免内存溢出和路径遍历风险。
使用 Spring MVC 的 @RequestParam("file") MultipartFile file 接收表单中的文件字段。关键点包括:
file.isEmpty() 防止空上传..、/、\),建议重命名(如 UUID + 原后缀)spring.servlet.multipart.max-file-size 配置)/opt/uploads/),而非 src/main/resources 或临时目录file.transferTo(new File(savePath)) 完成保存,确保目标目录存在且有写权限下载不直接暴露磁盘路径,而是通过 Controller 返回文件流。常用方式有两种:
ResponseEntity 包装 FileSystemResource,设置 Content-Disposition 头(注意对中文文件名做 URLEncoder.encode(name, "UTF-8"))HttpServletResponse.getOutputStream() 手动读取文件流(Files.newInputStream),分块写入(如 8KB buffer),并设置 Content-Length 和 Content-Type
Range 请求头,返回 206 Partial Content 及对应字节段文件处理是 Web 安全高危环节,不可跳过以下检查:
filename
file.getContentType())与扩展名是否匹配,必要时用 Apache Tika 检测真实 MIME 类型.jpg,.pdf),在前端 + 后端双重校验noexec 挂载选项;Windows 注意 IIS/Nginx 配置)前端不是摆设,配合得当能显著提升体验与容错能力:
必须声明,否则后端收不到文件input[type="file"],监听 change 事件预览文件名/大小file.size )和类型(file.type.startsWith('image/') || file.name.endsWith('.pdf'))
,注意 download 属性在跨域时失效,此时需后端设置 Content-Disposition: attachment