2013-02-12 29 views
9

Bằng cách xem qua tài liệu về mã vạch, tôi đang sử dụng mã sau đây để buộc tải xuống tệp từ máy chủ của tôi.Tải xuống tệp Codeigniter Force

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); 
    } 

Mã đang hoạt động cho hình ảnh, nhưng khi nó xảy ra với tệp PDF, nó không hoạt động. Tôi đã không thử nghiệm nó cho tất cả các phần mở rộng tập tin, nhưng vì nó không làm việc cho PDF, nó có thể không làm việc cho các loại tập tin khác nhau. Bất kỳ giải pháp nào?

+0

Không hoạt động như thế nào? không tải xuống? không mở trong trình đọc PDF? lỗi? –

+1

yea .. khi tôi clink vào liên kết mà tôi đã tạo 'download/32', nó chỉ mở liên kết và nó là một trang trống. nó là 'download/$ file_id' .. – prakashchhetri

+0

.zip, .jpg, .txt, .gif tất cả đều đang hoạt động, nhưng không .pdf – prakashchhetri

Trả lời

19

Tôi đã gặp sự cố tương tự, tôi cho rằng sự cố nằm trong một số tiêu đề và tiêu đề nhất định được gửi tới trình duyệt. Tôi đã sử dụng mã tôi tìm thấy ở đây http://taggedzi.com/articles/display/forcing-downloads-through-codeigniter. Sử dụng hàm bên dưới thay vì force_download. Nó đã làm việc cho tôi cho đến nay.

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(); 
} 

Hy vọng điều đó sẽ hữu ích.

+0

Có thể đây là vấn đề với các phiên bản cũ hơn của codeigniter, nhưng bây giờ tôi đang sử dụng codeigniter 2.2, pdf không có vấn đề gì, và câu trả lời của RJ Anoop rất hữu ích. – Musa

8

Nó cũng đang hoạt động cho .pdf cũng !!! plz kiểm tra đường dẫn đến tệp. đó có thể là vấn đề tôi nghĩ. Tôi cũng gặp vấn đề đó. Nhưng khi tôi sửa đường dẫn đến tệp, nó hoạt động hoàn hảo ... Sau đây là cách tôi đã viết mã !!!

if($src == "xyyx") 
{ 
$pth = file_get_contents(base_url()."path/to/the/file.pdf"); 
$nme = "sample_file.pdf"; 
force_download($nme, $pth);  
} 

Hy vọng điều này có thể hữu ích! Cảm ơn và kính trọng

+0

Ban đầu không hoạt động. chỉ hiển thị một trang trống. Tôi tha thứ để thêm phần mở rộng ".pdf" – aphoe