Grails отправляет файл, а затем удаляет - PullRequest
1 голос
/ 13 февраля 2012

Я отправляю файл, используя ответ << file.newInputStream (аналогично этому ответу <a href="/365254/skachat-fail-grails"> здесь , но позже я хочу удалить этот файл. Однако, когда я вызываю delete для этого файла, он не удаляет его. Я совершенно уверен, что это потому, что файл все еще используется (потоковая передача). Как это проверить, а затем удалить.

    def tempfile = new File(filename)
    if (tempfile) {
       response.setContentType("application/octet-stream")
       response.setHeader("Content-disposition", "attachment;filename=${tempfile.getName()}")
       response.outputStream << tempfile.newInputStream()
    } else {
       renderErrorMsg("ERROR: Cannot open/find file - ${filename}.")
    }
    tempfile.delete()

Спасибо.

1 Ответ

3 голосов
/ 13 февраля 2012

Вы не закрываете входной поток.Измените

response.outputStream << tempfile.newInputStream()

на

tempfile.withInputStream { response.outputStream << it }

Последнее обеспечит закрытие потока.Также вы можете удалить файл в блоке finally в случае возникновения исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...