Как выполнить код после возврата Результат в java Play! Фреймворк?

Я использую Play! Framework 2.2.1, и я хочу потокового файла, созданного на ходу. После того, как файл полностью передан в потоковом режиме, я хочу очистить его, но у меня нет контекста для этого.

Есть ли какие-либо аннотации или обратный вызов для этого вида операции?

1 ответ

Вы можете скопировать содержимое файла в 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); поэтому вам не нужно заботиться о создании заголовков, в любом случае вам нужно написать задачу планировщика, которая будет удалять файлы старше n минут / часов каждые x минут.

Другие вопросы по тегам