如何在codeigniter上的链接上单击下载文本文件

时间:2015-07-30 06:51:02

标签: php codeigniter csv

我的文本文件包含CSV文件格式的样本,我希望我的用户可以在链接点击下载该文件。

此文件位于此文件夹结构中:

  

资产 - > csv->样品-CSV-Format.txt

这是我尝试过的代码:

<?php
   $file_name = "Sample-CSV-Format.txt";

   // extracting the extension:
   $ext = substr($file_name, strpos($file_name,'.') + 1);

   header('Content-disposition: attachment; filename=' . $file_name);

   if (strtolower($ext) == "txt") {
       // works for txt only
       header('Content-type: text/plain');
   } else {
      // works for all 
      header('Content-type: application/' . $ext);extensions except txt
   }
   readfile($decrypted_file_path);
?>
 <p class="text-center">Download the Sample file <a href="<?php echo base_url();?>assets/csv/Sample-CSV-Format.txt">HERE</a> It has a sample of one entry</p>

此代码在页面加载时下载文件而不是链接点击。此外,它是下载页面的整个html结构我只想要我在文本文件中写的文本。

请指导问题在哪里?

4 个答案:

答案 0 :(得分:5)

您可以通过HTML5下载atrribute简单地完成此操作。只需在下载链接中添加此行。

<a href="<?php echo base_url();?>assets/csv/Sample-CSV-Format.txt" download="Sample-CSV-Format.txt"> HERE </a>

答案 1 :(得分:2)

您可以这样做,它不会重定向您,也适用于较大的文件。

在你的控制器&#34; Controller.php&#34;

function downloadFile(){
        $yourFile = "Sample-CSV-Format.txt";
        $file = @fopen($yourFile, "rb");

        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=TheNameYouWant.txt');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($yourFile));
        while (!feof($file)) {
            print(@fread($file, 1024 * 8));
            ob_flush();
            flush();
        }
}

在您的视图中&#34; view.php&#34;

<a href="<?=base_url("Controller/downloadFile")?>">Download</a>

答案 2 :(得分:0)

像这样做

someother_file.php

<?php
   $file_name = "Sample-CSV-Format.txt";

   // extracting the extension:
   $ext = substr($file_name, strpos($file_name,'.')+1);

   header('Content-disposition: attachment; filename='.$file_name);

   if(strtolower($ext) == "txt")
   {
       header('Content-type: text/plain'); // works for txt only
   }
   else
   {
      header('Content-type: application/'.$ext); // works for all extensions except txt
    }
                                           readfile($decrypted_file_path);
 ?>

some_html_page.html

 <p class="text-center">Download the Sample file <a href="<?php echo base_url();?>/someother_file.php">HERE</a> It has a sample of one entry</p>

答案 3 :(得分:0)

我认为将下载代码更好地提供给客户端,而不是为此编写一个控制器方法。 you can use this ref