人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cakephp2.0.5を使用した画像のアップロード方法を知りたいです。
いくつかの「画像をアップロードするプラグイン」を試したのですがどれも上手くいきません。
そのプラグイン全てがcakephp1.0の前バージョン仕様に作られており、エラーが発生しましても解決方法が分からないのです。2.0だから使えないのかもしれませんし・・・。
そこで、cakephp2.0バージョンを使っている方は、どのようなアップロード方法を実装しているのでしょうか?
よろしければ教えてください。
よろしくお願いします。

●質問者: ぱんたま
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●100ポイント ベストアンサー

そういえば、MLでそんな話題が流れていたなと思って、見返してみました。
その中で挙げられていたものをリストアップしておきます。

http://milesj.me/code/cakephp/uploader
https://github.com/davidpersson/media
https://github.com/webtechnick/CakePHP-FileUpload-Plugin/tree/cakephp2.0
https://github.com/jrbasso/MeioUpload

どれも僕の方では、動作確認しておりませんので、あしからず。

詳しくはこちらを参照してください。
http://groups.google.com/group/cake-php/browse_thread/thread/d70b6fd20547a086/9e35cd3b46ffa65f?lnk=gst&q=+File+Upload+Plugins#9e35cd3b46ffa65f


ぱんたまさんのコメント
貴重な情報ありがとうございました! しかし、今の私の技量ではまだプラグインを扱うのが難しいので、コントローラー内でアップロード処理を書くことにしました。 >|| public function add() { //画像の保存場所 $uploaddir = '/Applications/MAMP/htdocs/eigazuki/app/webroot/img'; //アップローロード処理 if(move_uploaded_file($movie["Movie"]["poster"]["tmp_name"], $uploaddir . $movie["Movie"]["poster"]["tmp_name"])) { $this->Session->setFlash("ファイルのアップロードに成功しました。"); }else { $this->Session->setFlash("失敗"); } } ||< (確認画面で画像を表示したいのでこのような処理をしています。) しかしこの方法では、失敗となります。 >|| $file_name = $movie["Movie"]["poster"]["name"]; $file_temp = $movie["Movie"]["poster"]["tmp_name"]; echo $file_name; echo $file_temp; ||< これで確認したのですが、$file_nameと$file_tempには値が格納されているのですが・・・。 どこがいけないのでしょうか? よろしければ教えてください。

tdoiさんのコメント
>|| $uploaddir . $movie["Movie"]["poster"]["tmp_name"] ||< ではなく、 >|| $uploaddir . DS . $movie["Movie"]["poster"]["tmp_name"] ||< では?

tdoiさんのコメント
ちなみにですが、上記のコードは一部抜粋ですよね? あと考えられるとすれば、パーミッションくらいでしょうか。 特にエラーとかが出る訳ではないのですか? 「失敗」とは何をもって失敗としているのですか?

tdoiさんのコメント
あとは、一般的なことでは、 - デバッグレベルが2になっているか確認 - セーフモードのON/OFFの確認 - アップロードされた一時ディレクトリのファイルが正しく読めるか確認 - /Applications/MAMP/htdocs/eigazuki/app/webroot/img/に直接ファイルを作成しようとしてできるか確認 と言ったところでしょうか。

tdoiさんのコメント
了解です。 addアクションでpostされたときに受け取ったデータを持って置いて、add_confirmアクションで保存しようとしていたわけですね。その時には既にアップロードの一時ディレクトリからはファイルが削除されていて、move_uploaded_fileが失敗すると。 DBにどう保存するかはアプリケーション次第でしょう。 255984751.jpegみたいな形でも構わないでしょうし、ユーザがアクセスする際のURLとかにしてもよいかもです。 前者の方が冗長性は少なくなりますが、後者の方は将来的にサブディレクトリを切った時とかにも汎用性がある可能性があります。

ぱんたまさんのコメント
そうです。その通りです! ご協力ありがとうございました。 また新たな疑問がでてきましたので、ご回答していただけないでしょうか? 確認画面でアップロードした画像を表示したく app/View/Movies/add_confirm.ctpで >|| <?php echo $this->Html->image($movie['Movie']['poster']["name"]); ?> ||< を書きました。しかし、画像が表示されません。ソース上で確認しますと 「/eigazuki/img/1945799383.jpeg」に画像を置いてほしいと書かれていました。 そこでimgディレクトリを作成、保存パスを「/Applications/MAMP/htdocs/eigazuki/img/」 に変更しても画像が表示されません。 試しにソース上のそのリンクをクリックしますと「http://localhost/eigazuki/img/1879831387.jpeg」に飛ばされ Error: Create the class ImgController below in file: app/Controller/ImgController.php のエラーが表示されました。 確認画面上で画像を表示させるには、ImgControllerをあたらに作らないといけないのでしょうか?

tdoiさんのコメント
ファイルを >|| '/Applications/MAMP/htdocs/eigazuki/app/webroot/img/poster/' . $movie["Movie"]["poster"]["name"]; ||< に置いたのなら、 >|| <?php echo $this->Html->image($movie['Movie']['poster']["name"]); ?> ||< で表示されなくて当然かと。 >|| <?php echo $this->Html->image('poster/' . $movie['Movie']['poster']["name"]); ?> ||< とでもやれば表示されるのではないかと。 webroot/.htaccessには次の記述があります。 >|| <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,L] </IfModule> ||< 詳細は自分で調べてもらうとして、URLとして存在するファイルがあった場合はdispatcherに回さず、そのままファイルを参照させます。 上記のケースは、webroot/img/poster/1879831387.jpegは存在してたのでしょうが、webroot/img/1879831387.jpegは存在しなかったので、Dispatcherに回され、その結果として、ImgControllerが処理するべきと判断されたためこのようなエラーメッセージが表示されています。

ぱんたまさんのコメント
ありがとうございます!なんとか思い通りの動作ができました! しかし、画像のアップロードを作っていたらある悩みが・・・。 映画のポスター画像をGoogleから探し、それを使用するってのは著作権法上違法なのかなと・・・。「問題ないよ」って人と「問題あるよ」って人がおり、人によって意見が分かれています。 これについてのtdoi さんの意見を聞かせていただけないでしょうか? 問題があるなら、Amazonのアソシエイトを利用して画像を利用するしかなさそうですが・・・。

tdoiさんのコメント
法律については、それなりの人に聞いてください。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ