又是好几百年没写知乎了,刚买的AirPods Pro今天丢失了,完整一个盒子加耳机,2000大洋上个月刚买,还热着呢,今天就掉了。贼鸡儿心痛。AirPods Pro 变成了Air了。唉,希望是在公司丢的,这样捡到的人或许还有可能归还我。
痛腚思痛,最近因为需要用到文件上传和下载的功能,因此把这些功能实现提取出来希望能帮助到大家,学习一下如何用SpringBoot实现RESTFul风格的这些接口。
你将学习到:
- 如何简单使用SpringBoot实现RESTFul的HTTP API
- 如何完成对文件的网络上传和下载
代码已经放在了GitHub上
wangruifei/file-demogithub.com
可以下载下来直接看代码是如何实现的,也可以不看代码直接看下文。
第一步:创建你的项目
- 去http://start.spring.io/
- 输入如下信息,记得“依赖Dependencies”里面添加一个Spring web

3. 点击“生成”就会生成一个SpringBoot项目
4. 用你喜欢的IDE打开这个项目,加载一下maven依赖,项目的壳就搭建好了
第二步:进行项目配置
- 在src/main/resources/application.properties文件里进行如下配置
##
上述的配置中,我们在SpringBoot的配置文件里设置上传上来的文件存储到file.upload-dir指向的位置,但是这个参数不是SpringBoot目前自带的参数,是我们自己定义的一个配置参数,如何让它映射到我们的Java文件中呢?
SpringBoot提供了一个非常好用的注解,叫做@ConfigurationProperties,下文直接告诉你怎么用
我们创建了一个类FileStorageProperties,这个类就是将application.properties里面提到的相关配置项塞到这个FileStorageProperties的相关字段中,那么我们后续写代码就可以直接拿来用了
package
其中的prefix ="file" 就是告诉SpringBoot我要取application.properties里面以file前缀开头的配置项进行映射,如file.upload-dir它的前缀就是file,然后会把upload-dir映射到FileStorageProperties中的uploadDir,方便又快捷,简直好用,馋哭了隔壁家的程序员。
当然想要在SpringBoot中让这个@ConfigurationProperties生效,还需要在你的SpringBoot启动类上添加@EnableConfigurationProperties注解,如下
package
第三步:实现Service和Controller接口
- 先定义我们的Service接口
package
其中storeFile方法是接受一个MultipartFile的文件类型参数进行存储操作,loadFileAsResource接受一个以URI作为文件名的参数来获取文件进行下载(URI跟URL差不多,不过URI一定能确定资源的位置,URL不一定,比如http://localhost:8080/helloword.jpg和/helloWord.jpg都是URL但是前者是URI后者不是URI),其中下载接口返回类型是Resource,它将文件抽象为资源,并且提供了很多非常好用的方法,如获取文件,获取其URL和绝对路径等。
2. 实现我们的Service接口
实现接口之前我定义过了一个关于File的Exception,当然这个并不是必要的,但是如果想要创建自己自定义的Exception也是OK的
package
package
3. 实现Controller接口
当设计Controller接口的时候就要考虑应该返回的Response类型,这里因为是demo所以直接定义了一个UploadFileResponse的类用作Controller层的response返回值
package
FileController类的实现
package
好了,一个简单的 实现文件上传和下载的功能就完成了,下面就可以用PostMan进行测试了


其他接口测试同理,不再赘述。
拜~