![Spring Boot 2实战之旅](https://wfqqreader-1252317822.image.myqcloud.com/cover/805/26542805/b_26542805.jpg)
上QQ阅读APP看书,第一时间看更新
3.8 文件的上传和下载
3.7节介绍了利用Thymeleaf模板进行国际化的使用,本节将使用FreeMarker模板进行文件的上传和下载,对前面Spring Boot使用模板框架进行一个回顾。
创建项目、项目依赖和配置文件与3.5节使用FreeMarker一致。在配置完依赖后,在src/main/resources/templates下新建一个index.ftl文件,文件内分别利用表单提交的方式写了两个表单,用于单个上传和批量上传,并且使用超链接的方式提供了一个下载方法,代码如代码清单3-40所示。
![](https://epubservercos.yuewen.com/47855F/15056703904175906/epubprivate/OEBPS/Images/Figure-T53_80988.jpg?sign=1739336860-Dp4ZpffKvXqA8M8hZ6Mi0JoVfa3j1f46-0-a9657a4f6fb71bb860170700f11f453e)
更改启动类,在类上添加注解@Controller,新建index方法用于跳转,向页面传值msg,方法如代码清单3-41所示。
![](https://epubservercos.yuewen.com/47855F/15056703904175906/epubprivate/OEBPS/Images/Figure-T54_80989.jpg?sign=1739336860-WZ2Raa9QprcLDZPFZmi1r51jg6hOd5aF-0-b4595391ba6886645311e0f5f53442d9)
接下来创建一个FileController用于文件上传和下载测试,具体方法如下:
(1)单个上传方法。可以根据页面上使用的input标签的name值获取对应内容,因为是文件,所以可以使用MultipartFile对象来接收文件,由于只是简单测试,因此利用File类自带的transferTo方法直接将文件存入对应存储位置。
(2)批量上传方法。获取页面内容的方式和单个上传方法大致相同,不同的是取得文件后,这里使用BufferedOutputStream流来进行上传,如果对Java流不太了解,那么可以学习一下相关流的知识,注意在使用结束后不要忘记关闭流。
(3)下载方法。本文中例子只是对固定位置的文件进行下载,在实际应用中,可以根据具体情况进行修改。同样,下载方法也是使用流的方式,并且响应到浏览器。
FileController类代码如代码清单3-42所示。
![](https://epubservercos.yuewen.com/47855F/15056703904175906/epubprivate/OEBPS/Images/Figure-T54_80990.jpg?sign=1739336860-e0cugPILUkBirEp5z4vRzibxlFsrHwfq-0-139199f385141bf41a70112d50eb0bed)
![](https://epubservercos.yuewen.com/47855F/15056703904175906/epubprivate/OEBPS/Images/Figure-T56_77344.jpg?sign=1739336860-yoGOZTTXljVFVLdH2gdCshRm3DtBD18g-0-3f4c5f95f80d737d944c45a8313d4fca)
本节只是进行简单的上传和下载,当然上述方法并不适用于大文件,只是对使用FreeMarker模板进行一个回顾。