在Play Framework中发送文件后进行清理

时间:2016-08-09 12:48:04

标签: scala playframework

我正在使用Ok.sendFile从服务器下载文件。

为此,我需要在服务器的本地文件系统中创建文件。

但是,由于服务器没有使用文件本身并且每个用户请求都创建了一个新文件,我想在下载操作完成后删除该文件。

我怎么能这样做,考虑到我已经完成了我的行动并返回了结果?

 def index = Action {
    val fileToServe = generateFile("fileToServe.pdf")
    Ok.sendFile(new java.io.File(fileToServe))}
 // How can I "clean-up" fileToServe.pdf after the d/l completes?

2 个答案:

答案 0 :(得分:10)

我建议您使用play.api.libs.Files.TemporaryFile,以便可以使用onClose方法的Ok.sendFile参数。

val fileToServe = TemporaryFile(new File("/tmp/" + tmpname))
Ok.sendFile(fileToServe.file, onClose = () => { fileToServe.clean })

答案 1 :(得分:0)

在Play 2.6.x中,您可以使用以下代码清理文件:

#Get tables list for whitelisting
$query3="Show tables";
$result3=mysqli_query($link,$query3);

if (!$result3) {
    echo "DB Error, could not list tables\n";
    echo 'MySQL Error: ' . mysqli_error();
    exit;
}

if ($result3=mysqli_query($link,$query3)){
    while($row=mysqli_fetch_row($result3)){

        $tables[]=$row[0];

    }
}       


#UNITS CAT WHITELIST CHECK  
if (in_array($units_cat,$tables)){

    echo nl2br (" \n Units Cat Table exists");

}else{

    echo "Table does not exist";
    mysqli_close($link);
    echo "<br>";
    die("non valid entry");
}