开发者社区> 问答> 正文

使用renderFile没有实现下载

jsp页面是这样:

<a href="/file/download/${file.id}">下载</a>

public void upload() {
// 上传代码
 new FileInfo().set("name", getFile().getFileName()).set("url", getFile().getSaveDirectory()).save();
 index();
 }

public void download(){ // 下载哪里的问题?在页面上点击下载没有任何反应。
 FileInfo info = FileInfo.dao.findById(getParaToInt());
 File file = new File(info.getStr("url")+info.getStr("name"));
 if(file.exists()){
 renderFile(file);  // 确定执行了这行代码
 }
 index();

展开
收起
小旋风柴进 2016-06-08 14:45:11 2338 0
1 条回答
写回答
取消 提交回答
  • JFinal 的 render系列方法,在调用以后,仅仅先 new 了一个 XxxRender对象并保存在 Controller 内部,当执行 index()方法以后,会再次调用另一个 render方法,本次调用会覆盖掉前面 renderFile 时创建的对象。所以,改成如下代码后肯定正常了:

    public void download(){
      FileInfo info = FileInfo.dao.findById(getParaToInt());
      File file = new File(info.getStr("url")+info.getStr("name"));
      if(file.exists()) {
        renderFile(file);
        return ;  // 关键在这里,要有 return; 否则 index()方法会被执行
      }
      index();
    }
    JFinal Controller 中的 render 方法在被调用后不会立即返回,需要使用下 return。总结一句就是:在一次请求中如果多次调用了render系列的方法,始终只有最后一次调用有效。
    2019-07-17 19:31:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
附件下载测试 立即下载
宏光S导航安装教程 立即下载
低代码开发师(初级)实战教程 立即下载