• 3.8 renderFile 文件下载
    • 1、renderFile 基本用法
    • 2、配置 baseDownloadPath
    • 3、renderFile(File file)
    • 4、为下载文件重新命名

    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");