お世話になっております。
やりたい事は、
cakePHP3で、画面にダウンロードリンクを貼り、クリックしたらDBにセットされているBLOB型のファイルをダウンロードするという機能です。
ダウンロード画面などは用意せず、リンククリックでダウンロードする機能です。
分からない事は、
Controllerで、$this->responseの何に何を指定したらよいか、で詰まっています。
View(ctp)
PHP
1<?= $this->Html->link('ダウンロード', ['controller' => 'Users', 'action' => 'download/'.$user->id] ) ?>
Controller
PHP
1public function download($id=null) { 2 $this->autoRender = false; 3// $this->response->type($user->user_file_type); 4// $this->response->file($user->user_file); //ここの引数をどうしたらよいかで詰まっています。 5// $this->response->download($user->user_file); //ここの引数をどうしたらよいかで詰まっています。 6 header('Content-type: ' . $user['user_file_type']); 7 header('Content-length: ' . $user['user_file_size']); 8 header('Content-Disposition: attachment; filename="'.$user['user_file_name'].'"'); 9 echo $user['user_file']; 10 11}
MySQLの定義は下記の通りになります。
user_file_type | user_file_name | user_file_size | user_file |
---|---|---|---|
VARCHAR(255) | VARCHAR(255) | int(11) | MEDIUMBLOB |
ExcelやWordなどファイル形式は指定せず、ファイルタイプがセットされる。 | ファイル名がセットされる。 | ファイルのサイズがセットされる | ファイルそのものがバイナリでセットされる。 |
user_file_type(VARCHAR):ExcelやWordなどファイル形式は指定せず、ファイルタイプがセットされる。 | |||
user_file_typeの例)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
ご回答お願い致します。
追記・変更
Controllerをソースの通り、
headerをセットして、echoでファイルを指定するように変更したところ、
DBのファイル名でダウンロードされるようにはなったのですが、
中身がすべて「Resource id #000」となってしまいます。
BLOBに格納したデータが正しくダウンロードする方法をご存知の方がいらっしゃいましたらご回答お願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。