在 Play Framework 中上传后从临时文件夹中删除文件

Posted

技术标签:

【中文标题】在 Play Framework 中上传后从临时文件夹中删除文件【英文标题】:Delete file from temp folder after uploading in Play Framework 【发布时间】:2015-04-24 20:08:22 【问题描述】:

我使用的是2.2.3版本的Play Framework,我上传文件的sn-p如下:

def process = SecuredAction(false, None, parse.temporaryFile) 
request =>

    val uploadedFile = request.body.file

    service.processFile(uploadedFile)    
    ...

 

这个 parse.temporaryFile 解析器正在用类似于这个的文件污染我的临时文件夹: requestBody4950142040693742317asTemporaryFile_1424693062067.zip。我想从我的临时文件夹中删除这些文件。有什么建议如何防止它们创建或上传后如何删除它们?

【问题讨论】:

【参考方案1】:

我从未使用过 Play 的上传功能,但您似乎可以这样做:

service.processFile(uploadedFile)
request.body.clean()
Ok("All done!")

我假设 service.processFile 在这里是同步的。

【讨论】:

【参考方案2】:

@AndreasDuRietz 是正确的,您可以调用request.body.clean(),这只是删除底层File 的别名。但是,这不是必需的。 TemporaryFile 覆盖 finalize,当对象被垃圾回收时,它会为你调用 clean()

请参阅source。

【讨论】:

但请记住,finalize 可能永远不会被调用。 See why【参考方案3】:
                /*delete to-server-temp-folder uploaded file*/
                  request.body.file("Img").foreach 
                    case FilePart(_, _, _, ref, _, _) =>
                      val file = new File(ref.path.toString)
                      if (file.exists()) file.delete()
                  

【讨论】:

【参考方案4】:

玩! 2.7.x

    request.body.delete()

【讨论】:

以上是关于在 Play Framework 中上传后从临时文件夹中删除文件的主要内容,如果未能解决你的问题,请参考以下文章

用户从 Play 商店安装后从应用发送欢迎通知?

Play framework 2.3.x Server Error 无法注册类

为啥应用程序在上传后从 testflight 的 Build 部分中删除

使用 dbutils 在 Databricks 中上传后从目录中删除文件

Play Framework 路由中的变量

如何在上传后从dropzone中删除所有文件