2014-06-23 17 views
4

我正在使用Play!框架2.2.1,我想流传输中创建的文件。文件完全流式传输后,我想清理它,但是我没有任何上下文来执行此操作。如何在返回后执行代码java中的结果播放!框架?

这种操作是否有任何注释或回调可用?

+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分钟。

+0

我会尝试第一个代码。第二个选项是不安全的,因为如果文件太大,带宽很短,最终可能会出现异常,不是吗?我当然可以接受它。 –

+0

然而,你不能tmpFile被删除_before_返回 – biesior

+0

这段代码是错误的,因为它打破了文件下载,它削减它。不管怎么说,还是要谢谢你。我已经通过每次收到请求时清理资源来解决它。 –

相关问题