0

我正在开发 Cakephp 2.x .. 我现在所做的是 .. 我正在向用户显示一个表单,在该表单中我给了他上传音频文件的选项 .. 所以我从用户 .. 我将文件保存到 app/uploads 文件夹中 .. 并将路径保存到数据库中...现在的问题是我不知道如何检索我的音频文件并将它们显示到我的视图页面中

这是我的上传功能

 public function audio(){


    if ($this->request->isPost()){
        $this->loadModel('Audio');
        $file = $this->request->data['Audio']['file'];

         $idUser = $this->Auth->user('idUser');


        if ($file['error'] === UPLOAD_ERR_OK) {
            $id = String::uuid();
            $name =$file['name'];

            $folder_url = APP.'uploads/'.$idUser;
        if(!is_dir($folder_url)) {
            mkdir($folder_url);
        }
        move_uploaded_file($file['tmp_name'],  $folder_url.DS.$name);

            $this->request->data['Audio']['User_id'] = $idUser;
            $this->request->data['Audio']['filename'] = $file['name'];
            $this->request->data['Audio']['filesize'] = $file['size'];
            $this->request->data['Audio']['filemime'] = $file['type'];
            $this->Audio->save($this->request->data);


            return true;
        }
    }
    return false;
  }

 public function showAllAudioFiles(){
   }

现在特定用户的文件已存储到此文件夹app/uploads/23/file.mp3

4

1 回答 1

0

回答:

假设每个用户只有一个文件,您只需要找到数据库记录并从中构造路径:

public function showAllAudioFiles(){
    $record = $this->Audio->find('first', array('conditions' => array('User_id' => $this->Auth->user('idUser')));
    $file = APP . 'uploads' . DS . $this->Auth->user('idUser') . DS . $record['Audio']['filename'] . '.' . $record['Audio']['filemime'];
    $this->set('file', $file);
}

如果一个用户可以有多个文件:

public function showAllAudioFiles(){
    $records = $this->Audio->find('all', array('conditions' => array('User_id' => $this->Auth->user('idUser')));
    $files = array();
    foreach ($records as $record) {
        $files[] = APP . 'uploads' . DS . $this->Auth->user('idUser') . DS . $record['Audio']['filename'] . '.' . $record['Audio']['filemime'];
    }
    $this->set('files', $files);
}

例如,现在该$file变量将包含格式为app/uploads/23/file.mp3的字符串。或者$files将是这些字符串的数组。

建议:

以正确的“蛋糕”方式进行操作,您只需检索记录并使用以下media方法回显它们HtmlHelper

行动:

public function showAllAudioFiles(){
        $record = $this->Audio->find('first', array('conditions' => array('User_id' => $this->Auth->user('idUser')));
        $this->set('file', $record);
}

看法:

echo $this->Html->media($file['Audio']['filename'] . '.' . $file['Audio']['filemime'],
    array('pathPrefix' => 'uploads' . DS . $file['Audio']['User_id']
);

这应该输出如下内容:

 <audio src="/uploads/23/file.mp3"></audio>

创建文件的链接

编辑:对于文件的链接,只需使用 HtmlHelper 的link方法:

 echo $this->Html->link($file['Audio']['filename'], WWW_ROOT . DS . 'uploads' . DS . $file['Audio']['User_id'] . DS . $file['Audio']['filename'] . DS . $file['Audio']['filemime']);

HtmlHelper::媒体

于 2013-07-17T16:09:54.650 回答