2011-12-16 4 views
1

Amazon S3にjqueryアップロードを使用して画像をアップロードしています。私はRuby Gems carrierwaveとフォグを使用して動作させています...しかし、私は何をしようとしていますか? s3の場合、amazon S3に保存されるcarrierwaveによって生成されたイメージは、元のimg filesizeのアップロードが3MB以上であっても、500kbを超えてはなりません。イメージ操作Rails Carrierwave to Amazon S3

基本的に私はコントロールを持っていて最終的な画像のファイルサイズを制限することはできません。

さらに、Amazon S3でファイルの高さと幅を追跡したくない場合はどうすればいいですか。つまり、画像のWxHをデータベースに保存しておきたいので、必要に応じて参考にします。

コメント、アイデア、または提案には、多くのものがあります。

ありがとうございました。

答えて

2

ファイルを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 

、私は実際のファイルサイズを節約していますが、あなたの代わりに寸法のためにこれを微調整することができます:あなたは、このような方法がなければなりません。これはファイルを保存するモデルになります。

関連する問題