下载yii上传到本地文件夹的文件

时间:2016-03-06 17:20:03

标签: php file yii download

我已在Yii中创建了一个上传文件页面,该页面已成功保存在数据库和本地文件夹中,并且我一直在研究如何下载此文件并且我遇到{{3}并试图遵循它。

在我的模型中,我将其添加到规则中:

array('location', 'file', 'types'=>'jpg,jpeg, png, doc,docx,xls,xlsx,pdf',
                  'maxSize'=>1024 * 1024 * 3, // 3MB
                  'tooLarge'=>'The file was larger than 3MB. Please upload a smaller file.',
                   'allowEmpty' => true),    
        );

我的控制器看起来像这样:

public function actionDisplaySavedImage()
{
    $model=$this->loadModel($_GET['id']);

    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Transfer-Encoding: binary');
    header('Content-Disposition: attachment; filename='.$model->location);

        echo $model->location;
}

和我的观点:

<?php echo CHtml::link('Download Here',array('displaySavedImage','id'=>$model->primaryKey)); ?>

我可以下载该文件,但是当我打开它时,它是一个混乱的文件类型。

例如,如果我下载图像,则会出现Windows照片查看器,但它会显示一条文字说“#34;文件类型不受支持&#34;或类似的东西。

如果我尝试使用不同的文件类型,例如.docx,也是如此。微软的话会说它不受支持。

请帮忙

2 个答案:

答案 0 :(得分:1)

public function actionDisplaySavedImage($id){
    $model = $this->loadModel($id);
    $upload_path = Yii::app()->params['uploadPath'] . $model->location; // /var/home/site/upload/image.jpg

    if (file_exists($upload_path)) {
        Yii::app()->getRequest()->sendFile($model->location, file_get_contents($upload_path));
    } else {
        $this->render('httperror404');
    }
}

答案 1 :(得分:0)

以下是我用于从本地文件夹下载csv文件的代码。试试这个希望它也适合你。您可以根据自己的要求选择标题。

$reportFileName = pathinfo($model->report_file);
$csvFileName = "your file name";

header('Content-Type: application/csv');
header('Content-Length: '.filesize($folder.$csvFileName.'.csv'));
header('Content-disposition: inline; filename='.$csvFileName.'.csv');
echo file_get_contents($folder.$csvFileName.'.csv');