Как выполнить код после возврата Результат в 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 минут.