通过codeigniter文档,我使用以下代码强制从我的服务器下载文件。
function download($file_id){
$file = $this->uploadmodel->getById($file_id); //getting all the file details
//for $file_id (all details are stored in DB)
$data = file_get_contents($file->full_path); // Read the file's contents
$name = $file->file_name;;
force_download($name, $data);
}
代码是图像的工作文件,但是当它附带PDF文件的情况时,它不起作用。我没有测试它的所有文件扩展名,但由于它不适用于PDF,它可能不适用于其他各种文件类型。 任何解决方案?
答案 0 :(得分:20)
我遇到过类似的问题。我认为问题在于发送到浏览器的某些mime和标题。我最终使用了我在这里找到的代码 http://taggedzi.com/articles/display/forcing-downloads-through-codeigniter 。使用下面的函数而不是force_download。到目前为止,它对我有用。
function _push_file($path, $name)
{
// make sure it's a file before doing anything!
if(is_file($path))
{
// required for IE
if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); }
// 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 :(得分:10)
它也适用于.pdf !!! plz检查文件的路径。这可能是我认为的问题。 我也有这个问题。 但是当我纠正文件的路径时,它完美地工作了...... 以下是我编写代码的方法!!!
if($src == "xyyx")
{
$pth = file_get_contents(base_url()."path/to/the/file.pdf");
$nme = "sample_file.pdf";
force_download($nme, $pth);
}
希望这可能会有所帮助! 谢谢和问候
答案 2 :(得分:0)
尝试一下,我认为这是解决该问题的最佳实践。
function download($file_id)
{
$this->load->helper('file'); // Load file helper
$file = $this->uploadmodel->getById($file_id); //Get file by id
$data = read_file($file->full_path); // Use file helper to read the file's
$name = $file->file_name;;
force_download($name, $data);
}