後悔はしていない。
ジェネレーターで作ったので所々はしょってますが、ちょー簡単な作りです。
まずファイルアップロード
自分は、DBにはファイル名と拡張子とサイズしか入れませんでした。
中身はuploadsに直接保存しています。
まずテンプレート内で
を組み込む。これだけでファイル選択のボタンが作成されます。
次にアクション内で
普通にDBに保存する値をセットしていき、
$this->getRequest()->moveFile('file',
sfConfig::get('sf_upload_dir').'ファイルへのパス);
を組み込む。moveFile()の第2引数には保存するパスを指定しています。
saveされたらuploadsの下を見てみましょう。
アップロードについては他のブログでも紹介されてるけど、
意外とダウンロードは難しいらしくあまり紹介されてない。
てことでダウンロードを実装します。
まず自分はファイルの一覧を作りました。
data/listSuccess.php みたいな。
そこにファイル名の横にダウンロードのリンクを作成し、
飛んだ先のアクションで直にダウンロードが始まるようにしました。
まずアクション
public function executeDownload() {
$data = DataPeer::retrieveByPk($this->getRequestParameter('id'));
$file_path = sfConfig::get('sf_upload_dir').'ファイルへのパス';
$file_name = 'ファイル名';
$this->getResponse()->addHttpMeta('Content-Type',
'application/octet-stream; name='.$file_name);
$this->getResponse()->addHttpMeta('Content-Disposition',
'attachment; filename='.$file_name);
$this->getResponse()->addHttpMeta('Content-Length', ファイルサイズ);
$this->send_data = fread(fopen($file_path, 'rb'), ファイルサイズ);
}
まず、日本語で書いてある所は人によって入るものが違います。
最後の$this->send_data には実際のファイルデータが入っていて、テンプレートに渡しています。
そしてテンプレート
data/downloadSuccess.php
<?php echo $send_data ?>
これだけでアップロード・ダウンロードができるようになりました☆
気をつけなければならないのは、最後のdownloadSuccess.phpのlayout.phpを外す事です。
HTML要素が入っているとファイルの中身が壊れてしまうので注意です。
ジェネレーター最高^p^
HTML要素が入っているとファイルの中身が壊れてしまうので注意です。
ジェネレーター最高^p^