1 回答
TA贡献1946条经验 获得超4个赞
假设您的uploads文件夹位于 web 目录或 webroot 中,您可以使用以下功能,只需将粘贴复制到您的控制器中,然后下载文件,filename在查询字符串中键入 url 以及例如,如果您的控制器名称是FilesController那么网址将是www.mydomain.com/files/download?filename=your_file_name
/**
* Downloads the file
*
* @param string $filename the name of the file to be downloaded
*
* @return mixed
*/
public function actionDownload($filename)
{
$filepath = \Yii::getalias('@webroot') . DIRECTORY_SEPARATOR
. 'uploads' . DIRECTORY_SEPARATOR . $filename;
return \Yii::$app->response->sendFile($filepath);
}
请注意
这是最简单的方法,您将文件名与表中的路径一起保存,这是错误的,您应该只保存文件名和扩展名,就像my_file.doc没有路径一样,然后下载文件只需查找文件名在表中使用文件 id 而不是文件名或与表中的文件名一起存储的任何类型的哈希
public function actionDownload($fileId)
{
$filename = Upload::findOne(['id_uploads'=>$fileId]);
$filepath = \Yii::getalias('@webroot') . DIRECTORY_SEPARATOR
. 'uploads' . DIRECTORY_SEPARATOR . $filename;
return \Yii::$app->response->sendFile($filepath);
}
其次,您应该遵循类属性的命名约定,_upload因为公共属性看起来很奇怪,因为大多数私有成员变量都带有下划线前缀。你应该使用一些编码标准,比如phpcs
以及if条件中的 2 个重定向语句是什么
return $this->redirect(['view', 'id' => $model->id_uploads]);
return $this->redirect(['index']);
第二个是无法访问的,只需将其删除即可。
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报