Codeigniter - 使用force_download函数下载文件

时间:2012-11-19 11:02:33

标签: codeigniter download

我正在使用最新CI。我在当地工作时没有任何问题。但当我将我的作品转移到实时服务器时,我遇到了一个问题。

当我从下载标签下载文件时,文件正在以正确的大小和格式下载。但是当我打开下载的文件时,例如,如果是图像,图像没有显示,或者如果是单词,则要求选择编码类型,选择编码类型后,内容就是垃圾字符。

如何解决这个问题。?

提前致谢。

我用来下载文件的代码:

$content = file_get_contents($file_loc);
force_download(FILENAME.EXT, $content);

6 个答案:

答案 0 :(得分:4)

这适合我。

ob_clean(); 
$data = file_get_contents("localhost/qlip/uploads/filename.jpg"); //assuming my file is on localhost
$name = 'document.jpg'; 
force_download($name,$data); 

答案 1 :(得分:2)

尝试以下代码:

<?php

function downloadFile($file){
   $file_name = $file;
   $mime = 'application/force-download';
   header('Pragma: public');    
   header('Expires: 0');        
   header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   header('Cache-Control: private',false);
   header('Content-Type: '.$mime);
   header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
   header('Content-Transfer-Encoding: binary');
   header('Connection: close');
   readfile($file_name);    
   exit();
}
?>

和通话功能:

<?php
downloadFile("./files/image.jpg");
?>

如果文件“image.jpg”是正确的地址

答案 2 :(得分:0)

如果您愿意,可以试试这个:

function download() 
{
    // asumming you have http://www.domain.com/index.php/controller/download/file_name/extension/
    $extension = $this->uri->segment(4); // file extension
    $file_name = $this->uri->segment(3) . '.' . $extension; // file name
    $file_path = FCPATH . 'application/documentos/' . $file_name; // absolute path to file
    if (is_file($file_path)) {
        $mime = 'application/force-download';
        header('Pragma: public');    
        header('Expires: 0');        
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Cache-Control: private',false);
        header('Content-Type: ' . $mime);
        header('Content-Disposition: attachment; filename="' . $file_name . '"'); file name
        header('Content-Transfer-Encoding: binary');
        header('Connection: close');
        readfile(base_url() . 'application/documentos/' . $file_name); // relative path to file   
        exit();
    } else {
        redirect('/welcome/');
    }
}   

答案 3 :(得分:0)

添加ob_clean();在force_download()的代码之前;否则图像,文字文件被破坏。

ob_clean();
$content = file_get_contents($file_loc);
force_download(FILENAME.EXT, $content);

答案 4 :(得分:0)

CI 3中的

:对我有用

 $data = 'Here is some text!';
 $name = 'mytext.txt';
 force_download($name, $data);

或:

 // Contents of photo.jpg will be automatically read
 force_download('/path/to/photo.jpg', NULL);

source

答案 5 :(得分:0)

您的文件路径不正确。修复路径以纠正和运行。应该工作。