在 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 framework 2.3.x Server Error 无法注册类
为啥应用程序在上传后从 testflight 的 Build 部分中删除