質問: 個別会員情報ページでプロフ画像を保存する際に、方法は色々あるかと思いますか、データベースへは画像のURLを保存し、画像ファイル自体は別サーバーへ送信するような API用↔ファイル用 の構成を作りたいのですが、ここでファイル用サーバーの選び方と、WEBブラウザからのリクエスト処理で疑問があります。 ・サーバーは普通のレンタルサーバーで良いかなと思っているのですが、セキュリティ的な観点から見た際のファイルサーバーの選び方等有りましたら教えていただきたいです。 ・WEBブラウザから画像をアップロードする際は以下の順番で処理を行えば問題ないとは思うのですが☆☆の箇所で正常に画像がアップロードされなかった際の処理をどう実装すればいいのか不明です。 ``` ・WEBページAJAX等により、ファイルサーバに画像をアップロード ・正常に画像がアップロードされた場合、WEBページにConnectのレスポンスに加えアップロードディレクトリ情報(画像リンクURL)を返す ・Connectを受け取った後にWEBページからAPIサーバーに画像リンクURLを送信☆☆☆☆☆☆☆☆☆☆☆☆ ・APIサーバー側で画像の情報を保存、成功の場合Connect。失敗時はFailerを返し画像情報を消すようファイルサーバーへリクエストを投げる ``` 例えば、☆の箇所で、サーバー内処理にて予期せぬエラーが発生した際、ファイルサーバーへ画像の保存最終確認リクエストが送れなかったら、ファイルサーバー側では無駄なゴミファイルが増えて行ってしまいます。(まあ、データベースに登録されていないデータを削除すればいいだけの話ですが) なんだか安定的な実装では無いので、他にいい方法が有るだろうとは思いつつもこれがスマートかな。。とゆう状態で、気になって質問してみました。 こんな方法の方があるんじゃないか?等の意見等有りましたら御回答願います。
回答: > > ・サーバーは普通のレンタルサーバーで良いかなと思っているのですが、セキュリティ的な観点から見た際のファイルサーバーの選び方等有りましたら教えていただきたいです。 > > > セキュリティ的な観点(?)でいうと、現代であれば余計なことを考えたり対応したりしなくて済む、AWS S3やGoogle Cloud Storage等のファイルストレージを使うのが手っ取り早いんではないでしょうか。ただし権限設定等は注意しないと不用意に閲覧できてしまう危険性があるので要注意です。 > > ・WEBブラウザから画像をアップロードする際は以下の順番で処理を行えば問題ないとは思うのですが☆☆の箇所で正常に画像がアップロードされなかった際の処理をどう実装すればいいのか不明です。 > > > 「正常に画像がアップロードされなかった」というよりは、「画像はアップロードされたけれどAPIサーバの方で正常に保存されなかった」ということでしょうか? いずれにしても、「ファイルサーバー側では無駄なゴミファイルが増えて行ってしまいます」という事態はありそうですが、その場合でも定期的にバッチ等で不要なファイルの消し込みを走らせるといったことになるんではないかと思います。