通常のフォルダ構造は帽子を非常によくサポートする必要があります。主なことは、衝突を回避し、サイト全体の画像に使用する関連付けが一貫していることを確認することです。これらの理由から、すべての画像を1つのフォルダに保存するだけでは不十分です。
しかし、フォルダ名にuser_idを含める方が良いと思いますか?
私はこれをお勧めしません、それはその価値より多くの問題を引き起こすかもしれません。モデルクラスとIDを使用するだけで十分です。また、アップローダーではないユーザーが画像を表示しようとした場合など、アップローダーで画像のマッピングに問題が発生する可能性があります。
このフォルダーをpublic/uploadsフォルダーの外に移動する方がよいですか?
Amazon S3を使用しているため、参照している場所である場合、画像は実際にはプロジェクトのパブリック/アップロードに保存されません。これは、Carrierwaveがファイルのアップロード/サイズ変更中に使用する一時ファイルのみである必要があります。スペース/セキュリティが心配な場合は、これを確認し、必要に応じてニーズに合わせて調整することをお勧めします。
開発環境、本番環境、テスト環境で異なるフォルダーを使用するべきではありませんか?
必要に応じて、さまざまなフォルダを使用できます。
def store_dir
"#{Rails.env}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
または、Amazon S3で別のバケットを使用します(推奨):
次config/initializers/fog.rb
のようなもので:
CarrierWave.configure do |config|
config.storage = :fog
config.fog_credentials = {
:provider => <provider>,
:aws_access_key_id => <id>,
:aws_secret_access_key => <key>
}
if Rails.env == "production"
config.fog_directory = 'production'
elsif Rails.env == "development"
config.fog_directory = 'development'
elsif ...
config.fog_directory = '...'
end
end
または、別の環境ファイルで同様のことを行うこともできます。
何千人ものユーザーがプロファイルごとに約15個のファイルをアップロードしているサイト(フルサイズ、プロファイル、サムネイルサイズとして保存)に最適な方法でstore_dirをオーバーライドしたいと思います。
このストレージディレクトリ構造は、サイズ変更に関する限り、ガイドを確認する必要がありますが、問題なく機能するはずです。
アップデート:
ファイル名については、フォルダ自体の中で名前が衝突する可能性を回避できるように、ランダムな文字列に変更することを強くお勧めします。誰かがme.jpg
2つの異なるファイルをアップロードする可能性はほとんどありません。そうは言っても、これが私のやり方です。
以内にyour_uploader.rb
現在のファイル名をランダム化するfilenameメソッドを追加します。
def filename
random_token = Digest::SHA2.hexdigest("#{Time.now.utc}--#{model.id.to_s}").first(20)
ivar = "@#{mounted_as}_secure_token"
token = model.instance_variable_get(ivar)
token ||= model.instance_variable_set(ivar, random_token)
"#{token}.jpg" if original_filename
end
この特定の取り決めは少しやり過ぎかもしれませんが、それは私にとって十分であることがわかります。
お役に立てれば!