public function download($id,$file_name)
{
$this->load->helper('download');
force_download( NULL,base_url().'uploads/files/'.$file_name);
}
我正在使用此功能下载文件。文件的id和文件名传递给函数。但无论何时下载该文件,它的大小都会变得非常小,而且文件也不会执行。
我已经尝试过的事情:
我想提及的事情:
不会下载原始文件,这意味着它会自动创建一个同名的新文件或我在该函数中传递的名称。
我想下载的文件是.exe或.apk
我想要做的是,我想下载相同的原始文件,甚至它是原件的副本,然后它必须是可执行的(for .exe)
答案 0 :(得分:0)
做你的修改。
function download($path, $name)
{
// make sure it's a file before doing anything!
if(is_file($path))
{
// get the file mime type using the file extension
$this->load->helper('file');
$mime = get_mime_by_extension($path);
// Build the headers to push out the file properly.
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($path)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: '.$mime); // Add the mime type from Code igniter.
header('Content-Disposition: attachment; filename="'.basename($name).'"'); // Add the file name
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($path)); // provide file size
header('Connection: close');
readfile($path); // push it out
exit();
}
答案 1 :(得分:0)
您正在将null
传递给filename
参数,您需要将其传递给data
参数(第二个参数),因此您的代码应该是这样的
public function download($id,$file_name)
{
$this->load->helper('download');
force_download(FCPATH.'/uploads/files/'.$file_name, null);
}
另外,不要将base_url()
与路径连接起来,您可以将路径传递给base_url('/path/to/file')
函数,然后将链接返回到该文件。
我注意到您传递了$id
变量,但未使用它,您是否在未包含的代码的另一部分中使用它?
为什么你甚至有一个函数来调用force_download()
函数?你不能在控制器内部调用它吗?