查看代码中存在的PDF - Yii

时间:2014-03-07 18:22:18

标签: pdf yii

我已将PDF文件放在文件夹/ p​​rotected / uploads中。我想点击超链接查看此文件。但我面临错误,PDF没有显示 的错误

Error 404<br/>
Unable to resolve the request "uploads/viewPdf".

以下是我查看文件的方法。 的 main.php

'urlManager'=>array(
                        'urlFormat'=>'path',
                        'rules'=>array(
                'uploads/<filename:[a-zA-Z]+\.pdf>' => 'Upload/viewPdf',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                        ),
                ),

UploadController

class UploadController extends Controller
{
        public function actionIndex()
        {
                $this->render('index');
        }

    public function actionViewPdf()
    {
        $filename = $_GET['filename'] . '.pdf';
        $filepath = '/uploads/Tutorial' . $filename;

        if(file_exists($filepath))
        {
            // Set up PDF headers
            header('Content-type: application/pdf');
            header('Content-Disposition: inline; filename="' . $filename . '"');
            header('Content-Transfer-Encoding: binary');
            header('Content-Length: ' . filesize($filepath));
            header('Accept-Ranges: bytes');

            // Render the file
            readfile($filepath);
        }
        else
        {
            // PDF doesn't exist so throw an error or something
        }
    }
}

和表单中的链接。我想在这里提一下,表单属于其他控制器而不是上传控制器 的 _form

echo CHtml::link(
        'pdf',
        Yii::app()->createUrl('/uploads/viewPdf', array('filename' => 'Tutorial')) ,
        array('class'=>'btnPrint btn btn-danger','target'=>'_blank'));

2 个答案:

答案 0 :(得分:0)

echo CHtml::link(
        'pdf',
        Yii::app()->createUrl('/uploads/viewPdf', array('filename' => 'Tutorial')) ,
        array('class'=>'btnPrint btn btn-danger','target'=>'_blank'));

你没有一个名为uploads的控制器,你有一个名为upload的控制器,这就是问题所在。另外我相信你不应该使用第一个/当使用创建网址时。尝试使用

echo CHtml::link(
        'pdf',
        Yii::app()->createUrl('upload/viewPdf', array('filename' => 'Tutorial')) ,
        array('class'=>'btnPrint btn btn-danger','target'=>'_blank'));

还有一件事,我不确定在创建

时文件会解析为正确的路径
$filepath = '/uploads/Tutorial' . $filename;

控制器在一个文件夹中,为什么要/从那里上传/转到正确的文件夹?尝试使用完整路径,或使用dirname( FILE )检测路径并从那里获取。

也是为了确保。您创建一个看起来像这样的链接: /uploads/Tutorial.pdf这将解析为/protected/uploads/TutorialTutorial.pdf,这是你想要的功能吗?

答案 1 :(得分:0)

Mihai说的大多数都是真的,应该修复。此外,尝试更改控制器以包含$filename作为必需参数。如果网址中不存在$filename,则会抛出404。

public function actionViewPdf($filename){
    $filename .= '.pdf';
    ...
}