我已将PDF文件放在文件夹/ protected / 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'));
答案 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';
...
}