我正在使用Play!框架2.2.1,我想流传输中创建的文件。文件完全流式传输后,我想清理它,但是我没有任何上下文来执行此操作。如何在返回后执行代码java中的结果播放!框架?
这种操作是否有任何注释或回调可用?
我正在使用Play!框架2.2.1,我想流传输中创建的文件。文件完全流式传输后,我想清理它,但是我没有任何上下文来执行此操作。如何在返回后执行代码java中的结果播放!框架?
这种操作是否有任何注释或回调可用?
您可以文件的内容复制到的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分钟。
我会尝试第一个代码。第二个选项是不安全的,因为如果文件太大,带宽很短,最终可能会出现异常,不是吗?我当然可以接受它。 –
然而,你不能tmpFile被删除_before_返回 – biesior
这段代码是错误的,因为它打破了文件下载,它削减它。不管怎么说,还是要谢谢你。我已经通过每次收到请求时清理资源来解决它。 –
我最终试图通过调用清理资源并生成新文件。如果文件描述符被阻塞,我认为它可能会创建不需要的资源。 –