3.8 renderFile 文件下载

1、renderFile 基本用法

renderFile 系列方法用于下载文件。

renderFile 方法使用一个 baseDownloadPath 参数为基础路径去寻找文件。以标准的 maven 项目为例,该参数默认值指向目录:src/main/webapp/download

以下是在默认配置下的使用示例:

  1. // 最终下载文件为:src/main/webapp/download/file.zip
  2. renderFile("file.zip");
  3.  
  4. // 最终下载文件为:src/main/webapp/download/abc/def/file.zip
  5. renderFile("abc/deb/file.zip");

如上所示,最终下载文件总是:baseDownloadPath + renderFile 传入的参数

baseDownloadPath 的存在相当于固定了一个基础路路径。renderFile 总是以该路径为基础路径去寻找文件。

2、配置 baseDownloadPath

baseDownloadPath 还可以在 configConstant(Constants me) 中自由配置,例如:

  1. me.setBaseDownloadPath("files");

以标准的 maven 项目为例,以上配置的 baseDonwnloadPath 值将指向目录 src/main/webapp/files。

此外,还可以将 baseDownloadPath 配置为绝对路径,那么该路径将跳出项目之外,例如:

  1. // linux、mac 系统以字符 "/" 打头是绝对路径
  2. me.setBaseDownloadPath("/var/download");
  3.  
  4. // windows 系统以盘符打头也是绝对路径
  5. me.setBaseDownloadPath("D:/download");

以上配置 Linux 下以 "/" 打头则表示是绝对路径,那么 renderFile 将去该路径 "/var/download" 之下去寻找下载文件。

这种配置可以跳出项目之外,便于项目资源与下载资源进行分离,也便于集群部署(单机多实例部署)时多个节点可以共享同一个目录,共享同一份下载文件。

3、renderFile(File file)

renderFile(File file) 方法直接使用 File 参数去获取下载文件,可脱离 baseDownloadPath 的束缚,指向任意地点的文件,例如:

  1. String file = "D:/my-project/share/files/jfinal-all.zip";
  2. renderFile(new File(file));

如上所示,File 指向了一个任意地点的文件,跳出了 baseDownloadPath 的束缚。

4、为下载文件重新命名

如果不想使用下载文件原有的文件名,还可以指定新的下载文件名:

  1. renderFile("老文件名.txt", "新文件名.txt");