Загрузка файла с помощью Yii

Я использую инфраструктуру Yii, и у меня есть веб-сайт, позволяющий администратору загружать текстовый файл или файл PDF. Теперь я хочу разрешить пользователю щелкнуть ссылку и начать загрузку этого файла. Как это достигается внутри платформы Yii? ?

Я храню файлы в Yiiapplication / uploads / downloads / test.txt.

Я пробовал следующий код, который я нашел в Интернете, но он не работает.

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

Нужно ли улучшать все, что он загружает, это текстовый файл с<a href=‘, который не является исходным содержимым файла.

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 | и т. д.

4

Другие решения

Скачать расширение отсюда 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');
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector