使用Yii下载文件

时间:2014-09-25 14:36:17

标签: php yii download

我正在使用Yii框架,我有网站允许管理员上传文本文件或pdf.Now我想让用户点击一个链接并开始下载该文件。这是如何在里面实现的Yii框架?

我将文件存储在Yiiapplication / uploads / downloads / test.txt。

我已经尝试了以下在网上找到的代码,但它无效。

Yii::app()->request->sendFile(Yii::getPathOfAlias('webroot').'/uploads/downloads/23602414.txt','click me');

我是否需要改进它下载的所有内容都是一个带有&#39; <a href= &#39;的文本文件。这不是文件的原始内容。

2 个答案:

答案 0 :(得分:4)

如果您不想使用扩展程序,为什么不尝试创建一个强制下载的简单方法。

public function downloadFile($fullpath){
  if(!empty($fullpath)){ 
      header("Content-type:application/pdf"); //for pdf file
      //header('Content-Type:text/plain; charset=ISO-8859-15');
      //if you want to read text file using text/plain header 
      header('Content-Disposition: attachment; filename="'.basename($fullpath).'"'); 
      header('Content-Length: ' . filesize($fullpath));
      readfile($fullpath);
      Yii::app()->end();
  }
}

public function actionDownload(){
  $path = Yii::getPathOfAlias('webroot')."/uploads/downloads/23602414.pdf";
  $this->downloadFile($path);
}

并建立链接以下载这些文件

<?php echo CHtml::link('Download file',array('youController/download')); ?>

在决定标题类型之前,您可以通过检查文件类型使内容类型更加灵活来改进此代码。可以是pdf | txt | jpeg | etc。

答案 1 :(得分:0)

从这里下载扩展程序http://www.yiiframework.com/extension/cfile/

// Set Your file path 
$myfile = Yii::app()->file->set(Yii::app()->basePath.'/../uploads/documents/'.$_GET['file'], true);


 if (Yii::app()->file->set(Yii::app()->basePath.'/../uploads/documents/'.$_GET['file'])->exists){

            $myfile->download();

 } else {

            echo Translate::__('File Not Found');
  }