cakephpで動画をアップロードするサイトを作っています。
テストで1秒の動画(4M)をアップロードしてみたところ、パソコンではアップした動画が再生できるのにスマホでは、まずvideoタグのところが空白になり、その本来動画があるはずの空白部分をクリックすると> Error: VideoController could not be found.
と怒られます。
以下はフォームと表示それぞれのビュー、コントローラです。
最初は画像ファイルのアップロードをしていたのでimgになったままで本当にすみません。ガタガタなコードもご容赦願います。
1.アップロードフォームのビューとコントローラです。
<?= $this->Form->create($movie,['type'=>'file'])?> <fieldset> <legend>動画をアップロード</legend> <?php echo $this->Form->hidden('user_id',['value'=>$authuser['id']]); echo $this->Form->control('name',['type'=>'text', 'placeholder'=>'タイトル','label'=>false,]); echo $this->Form->control('content',['type'=>'textarea','placeholder'=>'コメント','label'=>false]); echo $this->Form->control('img',['type'=>'file','label'=>false]); ?> </fieldset> <?= $this->Form->button('アップロード',['id'=>'upload']);?> <?= $this->Form->end()?>
public function upload(){ $movie=$this->Movies->newEntity(); if ($this->request->is('post')) { $img=$this->request->getData()['img']; $ext=pathinfo($img['name'],PATHINFO_EXTENSION); $name=md5(uniqid(rand(),1)). '.' .$ext; $movie->img_ext=$ext; $movie->img_size=$img['size']; $movie->img_name=$name; if($movie->img_ext!='mp4'){ $this->Flash->error(__('mp4,ogv.webmファイルのみ対応')); return $this->redirect($this->referer());} if($movie->content==='') {$movie->content='コメントはありません';} $movie=$this->Movies->patchEntity($movie,$this->request->getData()); if ($this->Movies->save($movie)) { if(!empty($this->request->getData()['img']['name'])) { move_uploaded_file($this->request->getData()['img']['tmp_name'], './video/'.$movie->img_name); $this->Flash->success(__('アップロードしました')); $this->redirect(['action'=>'index']); }else{ $this->Flash->error(__('もう一度やり直してください')); $this->redirect(['action'=>'upload']); } } } $this->set(compact('movie')); }
2.動画の表示のビューとコントローラです。
//index.ctp アップロードした動画の一覧 <table> <?php foreach ($movies as $movie): ?> <?= $this->element('one_box',['movie'=>$movie])?> <?php endforeach; ?> </table>
//one_box.ctp エレメント <tr> <td class="left-container"> <a href="<?= $this->request->getAttribute('webroot') ?>video/<?= $movie->img_name?>"> <video src="<?= $this->request->getAttribute('webroot') ?>video/<?= $movie->img_name?>"></video> </a> </td> <td class="right-container"> <a href="<?= $this->request->getAttribute('webroot') ?>video/<?= $movie->img_name?>" class="movie-title"> <h4><strong><?= $movie->name?></strong></h4> </a> <p class="comment"><?= $movie->content?></p> <p class="created">アップロード<?= $movie->created?></p> <div id="delete"> <?= $this->Form->postLink(__('削除'), ['action' => 'delete', $movie->id], ['confirm' => __('削除します')]) ?> </div> </td> </tr>
public function index(){ $movies=$this->paginate('Movies',[ 'order'=>['created'=>'desc'], 'limit'=>'10' ]); $this->set(compact('movies')); }