我正在生成一个.MSI文件并提供下载链接。但下载后我需要删除该文件(如果用户选择"保存"而不是取消)。请在这方面给我一些输入。
我想使用readfile(),但它会通过输出到browser.但我的情况并非如此。我需要点击下载MSI文件。
<a href="http://localhost/john_CI/june/Enterprise-Setup_test.msi" id='32_bit_url1'>32-bit suite </a>
制作这样的控制器函数:
public function download($id) {
$this->load->helper('download');
$filepath = "url/" . $id;
force_download("file-name", $filepath);
ignore_user_abort(true);
unlink($filepath);
}
最好这样做。
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
// Ignore user aborts and allow the script to run
ignore_user_abort(true);
//read the contents and store in memory
readfile($file);
//remove the file after download
unlink($file);
我不知道你为什么要在下载终止后立即删除文件,无论如何,如果可以的话,最好有另一种方法来处理这种事情。为什么不将链接保存在数据库表中并给它一个过期日期?通过这种方式,您的用户可以下载文件,直到链接处于活动状态,然后您可以轻松删除过期的文件。