我正在使用Play! Framework 2.2.1和我想流式传输在旅途中创建的文件。文件完全流化后,我想清理它,但是我没有任何上下文可以这样做。

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

最佳答案

您可以将文件内容复制到FileInputStream,删除文件然后返回流,无论如何,您需要在原始文件的基础上设置一些 header ,即,如果生成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分钟/小时以上的文件。

09-28 11:56