Spring Boot 学习编写上传下载接口
一、项目基础配置
1. 核心配置文件(application.properties)
文件上传下载的核心配置集中在src/main/resources/application.properties,主要包含以下关键配置:
1 | # 文件存储目录(相对路径,会在项目根目录下创建) |
二、文件上传接口实现(POST /api/file/upload)
1. 接口功能
接收前端上传的单个或多个文件,保存到file.upload.dir配置的目录,并返回上传结果(如文件名、存储路径等)。
2. 核心技术点
- 使用
org.springframework.web.multipart.MultipartFile接收上传文件 - 生成唯一文件名(避免文件名冲突)
- 确保存储目录存在(若不存在则创建)
- 校验文件大小、文件非空等
3. 代码实现思路
1 |
|
三、文件下载接口实现(GET /api/file/download/{fileName})
1. 接口功能
根据文件名从存储目录读取文件,以附件形式返回给前端,触发浏览器下载。
2. 核心技术点
- 通过文件名定位服务器上的文件
- 设置响应头(
Content-Type、Content-Disposition)控制下载行为 - 以流的形式返回文件内容
3. 代码实现思路
1 |
|
四、文件预览接口(GET /api/file/preview/{fileName})
1. 接口功能
针对图片等可预览文件,直接在浏览器中显示(而非下载)。
2. 核心区别
与下载接口的主要差异在于Content-Disposition头:预览时不设置attachment,浏览器会根据Content-Type自动渲染。
3. 代码实现思路
1 |
|
五、关键注意事项
- 文件命名安全
必须使用唯一文件名(如UUID),避免使用原始文件名(可能包含特殊字符或导致覆盖)。 - 目录权限
确保file.upload.dir目录有读写权限,否则会出现Permission denied异常。 - 异常处理
- 捕获
MaxUploadSizeExceededException(文件大小超限) - 处理文件不存在、IO异常等场景,返回友好提示
- 捕获
- 前端配合
上传时表单需设置enctype="multipart/form-data",支持多文件上传时input标签添加multiple属性。
六、总结
通过上述配置和代码,可实现基础的文件上传、下载、预览功能。核心在于:
- 正确配置Spring的multipart参数
- 安全处理文件存储(唯一命名、目录创建)
- 合理设置响应头控制文件传输行为(下载/预览)
项目地址: https://github.com/zero201913/springboot-file-upload-test