JFinal文件下载

请问使用renderFile(file)方法时,如何在用户下载完成之后,将服务器中对应文件进行删除??我该如何判断用户下载完毕??直接在renderFile(file)后面直接file.delete的话,用户就无法进行下载了。

评论区

杜福忠

2018-12-12 12:22

写个DelFileRender 继承 FileRender
重写 render() 里面super.render() 之后 再 file.delete
使用的时候renderFile(DelFileRender(file))

逗不逗

2018-12-12 14:04

@杜福忠 你好,JFinal中FileRender中参数都是私有的,无法进行file.delete啊

逗不逗

2018-12-12 14:04

public class DelFileRender extends FileRender
{
public DelFileRender(File file)
{
super(file);
}

@Override
public void render()
{
super.render();
file.delete(); // 有错
}
} @杜福忠

杜福忠

2018-12-12 14:17

@逗不逗 (手动滑稽你昵称很个性...) 你JF多少版本的? 如果低版本的话, 就升级一下, 看下源码就知道是怎么回事了

逗不逗

2018-12-12 14:22

JFinal版本是2.2的,公司目前都是用这个做的,低版本的话就没有办法了吧@杜福忠

杜福忠

2018-12-12 14:52

@逗不逗 把FileRender的代码都拷贝到 DelFileRender里面就可以了

逗不逗

2018-12-12 16:16

不好意思刚看见,JFinal中的renderFile(file)里面的参数是一个file文件或file路径,renderFile(DelFileRender(file))这是什么?

逗不逗

2018-12-12 16:30

不好意思刚看见,JFinal中的renderFile(file)里面的参数是一个file文件或file路径,renderFile(DelFileRender(file))这是什么?@杜福忠

逗不逗

2018-12-12 16:52

刚刚看了JFinal的源码,他在renderFactory中直接写了
public Render getFileRender(File file) {
return new FileRender(file);
}
这样根本没办法把自己写的DelFileRender传过去啊,JFinal没有下载完成的标志么

杜福忠

2018-12-12 17:39

@逗不逗 写错了 是 render(new DelFileRender(file))

逗不逗

2018-12-12 18:18

@杜福忠 你好,按照你的思路将FileRender中的代码全都粘贴到DelFileRender中后,使用render(new DelFileRender(file))发现DelFileRender类中的init方法并未执行,会出现找不到文件路径的问题;另外这个删除是直接在render(new DelFileRender(file))后面进行file.delete进行删除么

杜福忠

2018-12-12 19:24

@逗不逗 不好意思, 刚看了下JF 2.2的源码, 你可以这样写:
public class DelFileRender extends FileRender {

protected File file;
public DelFileRender(File file) {
super(file);
this.file = file;
}

@Override
public void render() {
super.render();
file.delete();
}

}

逗不逗

2018-12-12 21:02

@杜福忠 嗯嗯,好了,真的非常非常感谢

热门反馈

扫码入社