下载与Yii框架从数据库BLOB链接(Download link from Database BLO

2019-11-03 16:27发布

我完全以新的Yii框架,我不明白如何创建,询问您是否whant保存文件的弹出窗口中的下载链接。

我所知道的和有至今:

  1. 我知道了CHtml ::链接(...)是如何工作的,并已经impelemted这一点。
  2. 我提取的BLOB内容形成数据库,并在$数据 - >文件保存它
  3. 其中i whant点击链接应该是一个CListView中内

我的数据库USERZ看起来是这样的

+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| file    | blob        | NO   |     | NULL    |                |
| USER_id | int(11)     | NO   | MUL | NULL    |                |
| zname   | varchar(40) | NO   |     | NULL    |                |
| date    | date        | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

我的控制器的Funktion(SiteController.php)

public function actionVerwal()
{
    $model2=new USERZ;
    $this->render('verwal',array('model2'=>$model2));

}

和视图(verwal.php)

<?php
 $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$model2->a(Yii::app()->user->getId()),
    'itemView'=>'_verwal',
));

//函数($ ID)只是确保在正确的用户数据提供

我不明白的部分(_verwal.php):

<b><?php echo CHtml::encode($data->getAttributeLabel('Files')); ?>:</b>
<?php echo CHtml::link(CHtml::encode($data->zname), $data->file); ?>
<br />

我怎样才能使文件名变为一个链接,这样就提供了下载。 我把所有需要的文件和名称的内容,但我不知道如何把它们放在一起,让它们变成1下载文件弹出。

Answer 1:

文件下载是由一个单独的请求到应用程序导致的文件头和信息发送处理。

所以,你想要做的是建立在所谓的像控制器新动作public function actionDownload($id) 然后,在你看来,你会链接到动作。

<?php echo CHtml::link(CHtml::encode($data->zname), array('site/download', 'id' => $data->id)); ?>

我们发送的数据的ID,这样的动作知道什么模型,它的工作与。

$user = USERZ::model()->findByPk($id);

现在,你可以通过你的下载操作中发送正确的头发送的用户文件给他们。

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=MY_FILE_NAME');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . count($user->file));
ob_start();
echo $user->file;
exit;

你真不该存储你的文件在数据库中,虽然,考虑一个文件夹中存储他们像保护/文件。



文章来源: Download link from Database BLOB with yii Framework
标签: php yii