java - Grails发送文件然后删除

标签 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()

谢谢。

最佳答案

您没有关闭输入流。改变

response.outputStream << tempfile.newInputStream()

tempfile.withInputStream { response.outputStream << it }

后者将确保流关闭。此外,您可能希望在 finally block 中删除文件,以防引发异常。

关于java - Grails发送文件然后删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257700/

相关文章:

java - 使用老式方式将整数转换为二进制

java - 为什么 DynamoDB 限制不适用于扫描?

html - html 标签中的 Grails i18n 消息

java - 二分查找中的最大键比较 (1+log(n)) 为何不是 log(n)?

java - 如何使用自定义登录模块捕获响应状态 Tomcat JaasRealm

grails - GORM : Find by collection contents

grails - 从哪里可以下载Grails 1.1?

MongoDB AggregationOutput 响应时间更长

java - Java中收集数据的有效方法是什么?

spring - 使用 Map 类型的构造函数参数定义 Spring bean