我想在用户下载后从下载目录中删除我的文件。但它没有被删除。我正在使用Codeigniter download_helper下载文件。 以下是我的代码:
控制器
public function download($key,$id)
{
$link=$this->article->download($key,$id);//get record from database via article model
if(empty($link))
{
show_404();
}
force_download(DOWNLOADS_PATH.$link->file_name, NULL);//download file
$this->article_lib->remove_downloaded($link->file_name);//user has downloaded so now delete this
}
库
public function remove_downloaded($file_name)
{
if(file_exists(DOWNLOADS_PATH.$file_name))
{
unlink(DOWNLOADS_PATH.$file_name);
}
}
答案 0 :(得分:1)
抱歉,我没有阅读,但您的代码存在的问题是它错过了结束)
public function remove_downloaded($file_name)
{
if(file_exists($file_name)) // here is the problem
{
unlink($file_name);
}
}
强制下载的工作方式也就是说之后的任何事情都不会运行。我建议在控制器之后使用ajax调用。
更新:
但正如您在评论中提到的那样,您可以在创建文件之前删除该文件,如本文Unlink after force download not working Codeigniter中所述
答案 1 :(得分:1)
我使用app.post('/compare', function (req, res, next) {
var options = {
host: 'hostname',
port: 80,
path: '/service',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': "Basic " + new Buffer(username + ":" + pass).toString("base64")
},
body: JSON.stringify({
requestType: 'createService'
})
};
var httpreq = http.request(options, function (response) {
response.on('data', function (chunk) {
console.log("body: " + chunk);
});
response.on('end', function() {
res.send('ok');
})
});
httpreq.end();
});
函数( docs )来解决此问题,这对我有用。
尝试以下代码,
ignore_user_abort(true)
答案 2 :(得分:0)
确保删除的文件不是目录。如果不确定 然后尝试这个。它也将删除文件和目录
function rrmdir($dir) {
if (is_dir($dir)) {
$files=scandir($dir);
foreach ($files as $file)
if ($file != "." && $file != "..") rrmdir("$dir/$file");
rmdir($dir);
}
else if (file_exists($dir)) unlink($dir);
}
答案 3 :(得分:0)
在下载时,您正在传递要下载的文件的完整路径,但删除它时,我的意思是在取消链接时,您只传递文件名。
所以请尝试:
public function download($key,$id)
{
$link=$this->article->download($key,$id);//get record from database via article model
if(empty($link))
{
show_404();
}
force_download(DOWNLOADS_PATH.$link->file_name, NULL);//download file
$this->article_lib->remove_downloaded(DOWNLOADS_PATH.$link->file_name); //Included full path
}
希望这有帮助。
答案 4 :(得分:0)
只需替换控制器功能
<强>这样:强>
$this->article_lib->remove_downloaded($link->file_name);
<强>与强>
$this->article_lib->remove_downloaded(DOWNLOADS_PATH.$link->file_name);
或者可能与:
$this->article->remove_downloaded(DOWNLOADS_PATH.$link->file_name);