我已在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,也是如此。微软的话会说它不受支持。
请帮忙
答案 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');