onunix 2012-08-20 10:42:27 2914次浏览 6条回复 0 0 0

想使用oracle的blob字段存储视频信息,这个对于Yii框架,有影响吗?有在Yii框架下,使用数据库存储视频信息的先例么?

我想到的问题包括: 自动生成的create界面,为了这个视频信息,需要输入一个本地文件路径,还要把本地文件存入数据库,这个是否全部要自己做?还是Yii框架可以实现? 自动生成的admin界面,点击这个视频信息字段,可以下载这个视频到本地吗?这个要自己做,还是Yii框架已经实现?

  • 回复于 2012-08-21 10:56 举报

    如果我做和话,我会保存视频的标识,如相对于webroot的路径及文件名等。而不保存在库中。

  • 回复于 2012-08-21 14:20 举报

    请给出这样做的理由,在数据库中,其备份、恢复、数据安全性、权限(Yii支持的访问权限,create,admin,view等)等都不用考虑了,如果不在数据库中,这些都需要考虑,不放在数据库中究竟能够带来什么好处?

  • 回复于 2012-08-21 14:48 举报

    谢谢提供这个例子,真的很好,我仔细看了下:其核心的代码:

    if(!empty($_FILES['Expenses']['tmp_name']['binaryfile']))
    {
        $file = CUploadedFile::getInstance($model,'binaryfile');
        $model->fileName = $file->name;
        $model->fileType = $file->type;
        $fp = fopen($file->tempName, 'r');
        $content = fread($fp, filesize($file->tempName));
        fclose($fp);
        $model->binaryfile = $content;
    }
     
    $model->user = Yii::app()->user->id;
    if($model->save())
        $this->redirect(array('view','id'=>$model->id));
    

    但是看不到读出文件后,具体的上传过程的代码,因为有时候文件比较大,这种方式做,是否会发生经常保存不成功,返回失败后,用户再次保存,然后后调用这个函数,从上面可以看到,这会重新读这个文件(fread($fp, filesize($file->tempName));
    ),然后从头开始上传,因此,这种做法似乎不如把文件上传做成单独的一个步骤,这样可以方便地使用 断点续传 功能

    就是说Yii提供的方法(你提供的例子),使得我们无法使用断点续传,不知道我的分析有没有错误,还请斧正。

  • 回复于 2012-08-21 16:33 举报

    视频文件都很大,最好存到数据库外面,只保存路径即可。2楼说的很对,可以采纳。

  • 回复于 2012-08-22 10:33 举报

    考虑下数据冗余问题。
    另外,对于大数据来说,使用单独的处理逻辑,不应该么?

您需要登录后才可以回复。登录 | 立即注册