在yii2项目中,我使用组件来下载其路径保存在我的数据库中的文件。
我已在操作列
中设置了下载按钮['class' => 'yii\grid\ActionColumn',
'template'=>'{update}{pdf}{delete}',
'buttons'=>[
// to display pdf icon.
'pdf' => function ($url, $model) {
$id = [];
foreach ($model->sdsrefs as $mod)
$id[] = $mod->file_id;
return Html::a('<span class="glyphicon glyphicon-download-alt"></span>', Url::to(['product/download', 'id' => implode($id)]), [
]);
}
],
'options'=>[
'style'=>'width:70px;'
]
],
我在上面的代码中设置了控制器操作的链接。
我的控制器操作
public function actionDownload($id)
{
Yii::$app->files->downloadFile($id);
$searchModel = new ProductSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
在控制器操作中,我正在调用组件以便下载。这里发生的是当我单击PDF按钮时它不会下载,而是回显页面中的内容。当我按下Pdf按钮时,我希望它执行文件的下载。
我在组件中的下载功能。
public static function downloadFile($id) {
$file = File::findOne($id);
$filepath = Files::getFilePath($id);
if (file_exists($filepath)) {
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file->file_name);
header('Content-Length: ' . filesize($filepath));
readfile("$filepath");
}else{
echo "file not exist: ".$filepath;
}
exit;
}
如何实现我的结果。下载点击pdf操作按钮时下载?
谢谢
答案 0 :(得分:2)
为什么不使用Response对象的sendFile()方法?
kAudioUnitRenderAction_PostRender
查看文档:{{3}}