如何在java Play中返回结果后执行代码!框架?

时间:2014-06-23 17:54:02

标签: java streaming playframework-2.2 resource-cleanup

我正在使用Play!框架2.2.1,我想流式传输一个文件。文件完全流式传输后我想清理它,但我没有任何上下文可以这样做。

是否有可用于此类操作的注释或回调?

1 个答案:

答案 0 :(得分:2)

你可以将文件内容复制到FileInputStream,删除文件然后返回流,无论如何,你需要根据原始文件设置一些标题,即如果你生成ZIP,它可以是(伪代码!):

public static Result file() {

    File tmpFile = new File("/path/to/your/generated.zip");

    FileInputStream fin = null;
    try {
        fin = new FileInputStream(tmpFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    response().setHeader("Content-disposition", "attachment;filename=" + tmpFile.getName());
    response().setHeader(CONTENT_TYPE, "application/zip");
    response().setHeader(CONTENT_LENGTH, tmpFile.length() + "");

    tmpFile.delete();

    return ok(fin);
}

其他选项是将临时文件写入专用文件夹并使用公共ok(file);返回它们,这样您就不需要关心标题的创建了,无论如何您需要编写调度程序任务,这将删除早于以前的文件每隔 x 分钟 n 分钟/小时。