前提・実現したいこと
サイト制作をしていて、画像アップロードをしたいと思っています。
DB接続もしていて、そこにテーブルを作りimages欄は作っています。
問1.しかし、アップロードされた画像たちはどこへ保存されるべきなんですか?
実務において企業やそこら辺のサイトは上のようにしていますか?
データベースに保存するという形で間違いないんでしょうか。
問2.その場合、inputで名前でも入力して、fileから画像をアップロードしますよね。
その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?またそのやり方を教えていただけますか?
"公式サイトのどこを見ればわかりますか?"画像に関しては私は見つけられず。
記述の仕方もわからず、困っています。
試したこと
リンク内容
と
リンク内容
を参考に現在アップロード関係を探っています。参考にしてください。
補足情報(FW/ツールのバージョンなど)
cakephp4
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
回答
問1.について
DBに画像そのものは保存しないです。
画像ファイル:任意のディレクトリに保存する。
画像ファイルパス:画像ファイルを保存した先のパスを取得する。
DBには画像ファイルパスを保存する。
ということを大体のところがやってると思います。
下記のURLも参考いただければと思います。
問2.について
DBに画像を保存しないので回答はしない、と思いましたが、
「画像 DB 保存 cakephp」で検索すればいろいろHITしたのでそれだけお伝えいたします。
参考
2017/06/21 の質問ですが、DBに画像を保存することのデメリットについてステキな回答があるので参考にしてください。
データベースに画像を保存するのはありでしょうか?
投稿2020/07/01 03:25
総合スコア193
0
アップロードするのがクライアントなら、クライアントが編集可能な領域(ディレクトリ)を
つくっておいてそこにアップするのが妥当です。(ファイル名の競合など避けられます)
投稿2020/07/01 03:25
総合スコア116724
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 03:49
0
アップロードされた画像たちはどこへ保存されるべきなんですか?
状況依存です。おおむね「ファイルとしてサーバ上に置いておく」「オブジェクトストレージを使う」というのが主流の選択肢です。
「データベースに入れる」という手もなくはないのですが、ちょっと扱いづらいです。
その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?
「データベースに画像を入れる処理」はCakePHP標準にはありませんので、やるとすれば自分で書く(もしくはそれを行えるライブラリを使う)必要があります。
投稿2020/07/01 03:22
総合スコア146018
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 03:23 編集
0
まず、DB に画像ファイルのバイナリデータをまるごと入れるのは(blob などのデータ型があるにせよ)しない方がよいでしょう。
入れておいたバイナリを取り出して、<img> タグに入れて表示に使うのに一手間かかってしまうからです。
それよりはどこかにファイルを置いておいて、DB には置き場所の情報さえあれば、<img> タグの src に適切なファイルパスを指定することで簡単に表示できます。
※ただしその場合、referer などでちょく
ちょっと特殊な方法だと、クラウドストレージ(AWS の S3 とか)に置いて、直接リンクさせる手もあります。この場合ファイル名が競合しようが、適切なディレクトリ階層さえ用意できれば問題ありませんし。
投稿2020/07/01 03:55
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
誰一人として、質問の一つである記述法の解とURLチェックすらしていなかったので、この件に関しては自分で調べることにします。
投稿2020/07/01 05:07
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
データベースに画像のようなバイナリファイルを保存することは可能です
僕も以前、PHP で実装していました
ただし、
- データベースに保存する場合
Amazon S3
などのオブジェクトストレージに保存する場合
それぞれにメリット・デメリットがあります
O'Reilly Japan - SQLアンチパターン という書籍の
11章 ファントムファイル
で非常に詳細に解説されていますので、
設計を決める前に一度確認しておくことをおすすめします
データベースに格納する場合
画像に関する情報
と画像自体
を別のテーブルに格納して、
外部キー
で関連付けておくことをお奨めします
このように設計しておかないと、
たとえば画像の一覧を取得したいときに
SELECT
文が重くなりサービスがダウンする可能性があります
投稿2020/07/01 04:59
総合スコア3272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
問1.しかし、アップロードされた画像たちはどこへ保存されるべきなんですか?
方針的なものもあると思いますが、環境にもよると思います。
例えば、レンタルサーバーを使っていて、DB は 100MB ぐらいしかないが、サイトのディスク容量は 数GB 与えられているとかですと、DB にはファイル名とか説明のみ保存して画像本体はサイトのディスクに保存せざるを得ないと思います。
DB サーバーの容量が大きくて将来的に容量不足になる可能性を気にしなくて良いなら、画像本体を含めすべて DB に保存した方が管理が楽そうです、が、組織のルールとか方針的なものがあれば話は違うかも。
問2.その場合、inputで名前でも入力して、fileから画像をアップロードしますよね。
ブラウザから画像をアップロードするなら html 要素の input type="file" 要素を使うことが多いと思います。JavaScript / jQuery を使ってアップロードすることも可能です。
その後、データベースに名前を保存して、imageも同じように保存すれば名前だけでなくテーブルのカラムになんらかの形で画像として保存されるんでしょうか?
画像本体を DB に保存するならバイナリーデータを保存できるフィールドを作って、それに保存することになるはずです。
DB サーバーが何かによりますが、例えば SQL Server なら varbinary(max) に画像本体のバイナリーデータを保存します。その他、ファイル名、MIME タイプ、説明などのフィールドも設けて画像に関するすべての情報を一括保存しておくのもよさそうです。
以下は SQL Server の例で、画像をアップロードしたらサーバー側でオリジナル画像を加工してサムネイルと表示用のサイズの小さい画像を作って一緒に保存しています。
投稿2020/07/01 03:44
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/01 04:25
退会済みユーザー
2020/07/01 04:45 編集
2020/07/01 05:07
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。