ファイルをAmazon S3に直接アップロードし、その場所からCarrierwaveでアプリに追加するのが良いパターンです。ファイルをs3の一時的なバケツ/場所に保存すると、carrierwaveが効果的に処理して移動させることができます。それが直接S3にアップロードされ、仮定された後、あなたはバケツを用意して、あなたは、あなたがそれを「移動」プロセス、それをそれを拾うCarrierwaveを持っているために、このようなコードを使用し、できるし、それをアップロード住所:
def add_file_from_URL(bucket, object_address)
s3 = AWS::S3::new
bucket = s3.buckets[bucket]
object = bucket.objects[object_address]
object_url = object.url_for(:read, :expires => 60*60, :secure => true) #expires in 1 hour
self.remote_attachment_url = object_url.to_s
self.save
object.delete()
end
このコードは、モデル内にファイルがあるモデルに挿入されます。
私はファイルを処理(サイズ変更)するためのコードを残していますが、Carrierwaveのドキュメント内でその部分を簡単に見つけられるはずです。
ファイルのメタデータを追跡するには、:before_saveコールバックを使用して、ファイルの横のフィールドにこの情報を格納することをお勧めします。この例では
private
def update_file_attributes
if file.present?
self.file_content_type = attachment.file.content_type
self.file_size = attachment.file.size
end
end
、私は実際のファイルサイズを節約していますが、あなたの代わりに寸法のためにこれを微調整することができます:あなたは、このような方法がなければなりません。これはファイルを保存するモデルになります。