0

このアプリのリンクをチュートリアルとして参照しています。それを見た後。プログラム(クライアントまたはサーバー)がどのように画像にアクセスできるかを知りたいです。プログラムは、Amazon S3にアップロードされた後、サーバーのデータベースに画像のURLを明示的に保存していないようです。

このアプリを実装した後、データベースにimage_urlsまたはパスの列が表示されません。しかし、プログラムは魔法のようにクライアントに画像をロードします!!

内部で何かが起こっています、それは何ですか?

写真モデルの方法は次のとおりです。

 Paperclip.interpolates :prefix  do |attachment, style|
   "#{attachment.instance.takenby}/#{Date.today.to_s }/#   
  {attachment.instance.image_file_name}"
 end 

 has_attached_file :image,
                :path => ":prefix/:style/:basename.:extension",
                :styles => { :thumbnail => "57x57", :original => "300x300" },
                :storage => :s3,
                :s3_credentials => S3_CREDENTIALS


  validates :image,:presence => true
  validates :lat, :lng,:presence => true,:numericality => true
4

1 に答える 1

1

のオプションにありますhas_attached_file:path引数で画像のパス(s3のファイル名に対応)を作成する方法を説明しました。したがって、画像を再度見つけるために必要なすべてのペーパークリップは次のとおりです。

  1. s3バケットのホスト名
  2. パスを再構築するための関連情報-この場合、、、、、およびのように:prefixなります。:basename:style:extension

その情報のほとんどはデータベースにあります。おそらく、元のファイル名から何らかの形で取得されます。このファイル名は、画像が添付されているモデル:basenameのフィールドに保存する必要があります。実行時に検索している画像サイズによって異なります。属性から決定できます。image_file_name:style:extensionimage_content_type

:prefix少しトリッキーです。Date.today実際、プレフィックスの作成に使用されるため、補間ルールによって画像ルックアップが破損するのではないかと心配しています。1日以上前の画像はありますか?もしそうなら、彼らはまだ機能しますか?画像がアップロードされると、その日の日付を含むファイル名が含まれるのではないかと心配しています。その後、画像を検索すると、新しい現在の日付を使用してURLが再構築され、403エラーが発生します。

TL; DRペーパークリップは、画像をs3にアップロードするときに画像のURLを作成し、後で同じパラメーターから画像を再作成します。

于 2012-10-16T19:06:11.740 に答える