3.8 renderFile 文件下载
1、renderFile 基本用法
renderFile 系列方法用于下载文件。
renderFile 方法使用一个 baseDownloadPath 参数为基础路径去寻找文件。以标准的 maven 项目为例,该参数默认值指向目录:src/main/webapp/download
以下是在默认配置下的使用示例:
- // 最终下载文件为:src/main/webapp/download/file.zip
- renderFile("file.zip");
- // 最终下载文件为:src/main/webapp/download/abc/def/file.zip
- renderFile("abc/deb/file.zip");
如上所示,最终下载文件总是:baseDownloadPath + renderFile 传入的参数
baseDownloadPath 的存在相当于固定了一个基础路路径。renderFile 总是以该路径为基础路径去寻找文件。
2、配置 baseDownloadPath
baseDownloadPath 还可以在 configConstant(Constants me) 中自由配置,例如:
- me.setBaseDownloadPath("files");
以标准的 maven 项目为例,以上配置的 baseDonwnloadPath 值将指向目录 src/main/webapp/files。
此外,还可以将 baseDownloadPath 配置为绝对路径,那么该路径将跳出项目之外,例如:
- // linux、mac 系统以字符 "/" 打头是绝对路径
- me.setBaseDownloadPath("/var/download");
- // windows 系统以盘符打头也是绝对路径
- me.setBaseDownloadPath("D:/download");
以上配置 Linux 下以 “/“ 打头则表示是绝对路径,那么 renderFile 将去该路径 “/var/download” 之下去寻找下载文件。
这种配置可以跳出项目之外,便于项目资源与下载资源进行分离,也便于集群部署(单机多实例部署)时多个节点可以共享同一个目录,共享同一份下载文件。
3、renderFile(File file)
renderFile(File file) 方法直接使用 File 参数去获取下载文件,可脱离 baseDownloadPath 的束缚,指向任意地点的文件,例如:
- String file = "D:/my-project/share/files/jfinal-all.zip";
- renderFile(new File(file));
如上所示,File 指向了一个任意地点的文件,跳出了 baseDownloadPath 的束缚。
4、为下载文件重新命名
如果不想使用下载文件原有的文件名,还可以指定新的下载文件名:
- renderFile("老文件名.txt", "新文件名.txt");