0

私のウェブサイトでは、ユーザーはプロフィール画像をアップロードできます。
これらの画像を保存する最良の方法を知りたかったのです。
私の考えは、単に専用のディレクトリです。イメージ名は user_id になります。

それは良い解決策ですか、それとももっと賢い解決策がありますか?

4

2 に答える 2

4

画像を保存するか、外部ソース (gravatar) を使用するかの 2 つのオプションがあります。

画像を保存する場合、これらの画像を公開したいですか、それとも非公開にしますか? それらが公開されている場合は、パブリック フォルダーに保存できます。

carrierwave画像のアップロード、バージョン管理、および保存を処理するようなものを使用できます。

パブリックなものについては、uploader/model name/field name/id の場所の下にある public ディレクトリにファイルを保存します。これは、私の側の組織的な目的のためです。

優れたチュートリアルについては、http://railscasts.com/episodes/253-carrierwave-file-uploadsをご覧ください。

プライベート イメージの場合は、ストア ディレクトリをパブリック フォルダーの外部に設定し、ファイルを使用してコントローラー内にダウンロード アクションを作成します。この方法では、コントローラーのアクションを実行しない限り、ユーザーはファイルをダウンロードできません。承認 ( cancan) があれば、ユーザーがその特定のファイルのダウンロード アクションにアクセスすることを許可または禁止できます (したがって、ある程度安全になります)。apache や nginx などの実稼働サーバーを使用する場合は、ファイルを送信するための適切なハンドラー (x_sendfile など) を設定してください。

于 2013-02-16T21:09:43.607 に答える
2

小さなアプリケーションのディレクトリに画像を保存することは非常に一般的です。ただし、ここで考慮すべき点がいくつかあります。

  • 多くのユーザーを想定していますか?100 万人のユーザーがいる場合、ディレクトリに全員の写真を保存すると、アプリケーションの実行時に大量のメモリが消費されます。

  • Heroku にデプロイしていますか? 多くの RoR アプリはそうであり、Heroku にデプロイすると、アプリが別の dyno に移動されたときに、ローカルに保存されているすべてのファイルが破棄されます (通常、これがいつ発生するかを予測する方法はありません)。ここでエフェメラル ファイルシステムについて読むことができますhttps://devcenter.heroku.com/articles/dynos#isolation-and-security

  • 一般に、すべての画像をローカルに保存しないことをお勧めします。スケーリングに合わせてコードを書き直すのは面倒だからです。Amazon S3 バケットにアップロードし、必要に応じて画像をダウンロードすることをお勧めします (そして、ユーザーがログインしたときのために画像をキャッシュします)。画像処理 (アップロードされた画像のサイズ変更、アップロードされた画像のサムネイル バージョンの作成など) を処理する必要がある可能性があるため、これらのファイルに永続的にアクセスできるバックグラウンド プロセスがある場合に役立ちます。これには「aws」gem と S3 ライブラリを使用しましたが、これは非常に使いやすく、詳細についてはhttp://amazon.rubyforge.org/を参照してください。

  • ただし、これを小さなアプリにするつもりで、Heroku にデプロイしない場合は、ローカル ディレクトリに保存するだけで、はるかに簡単で手間がかかりません。

于 2013-02-16T21:27:44.893 に答える