Я использую инфраструктуру Yii, и у меня есть веб-сайт, позволяющий администратору загружать текстовый файл или файл PDF. Теперь я хочу разрешить пользователю щелкнуть ссылку и начать загрузку этого файла. Как это достигается внутри платформы Yii? ?
Я храню файлы в Yiiapplication / uploads / downloads / test.txt.
Я пробовал следующий код, который я нашел в Интернете, но он не работает.
Yii::app()->request->sendFile(Yii::getPathOfAlias('webroot').'/uploads/downloads/23602414.txt','click me');
Нужно ли улучшать все, что он загружает, это текстовый файл с<a href=
‘, который не является исходным содержимым файла.
если вы предпочитаете не использовать расширение, почему бы не попробовать создать простой метод принудительной загрузки.
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 | и т. д.
Скачать расширение отсюда 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');
}