Grails发送文件然后删除

时间:2012-02-13 08:51:59

标签: java grails

我正在使用响应<<发送文件file.newInputStream(类似于这个回答here,但我想删除此文件。但是,当我在这个文件上调用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 个答案:

答案 0 :(得分:3)

您没有关闭输入流。改变

response.outputStream << tempfile.newInputStream()

tempfile.withInputStream { response.outputStream << it }

后者将确保流关闭。另外,如果抛出异常,您可能希望删除finally块中的文件。