2011-12-16 5 views
1

Amazon S3에 jquery 업로드를 사용하여 이미지를 업로드하고 있습니다. Ruby Gems carrierwave 및 안개를 사용하여 작동하도록 만듭니다 ...하지만 이미지를 업로드 할 때 무엇을하려고합니까? s3, amazon S3에 저장 될 carrierwave에 의해 생성 된 이미지는 원본 img 파일 크기가 3MB 이상인 경우에도 500kb보다 커야합니다.이미지 조작 레일 Amazon S3에 Carrierwave

기본적으로 나는 제어 할 수없고 최종 이미지의 파일 크기를 제한 할 수 없습니다.

또한 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 

이 예제에서는 실제 파일 크기를 저장하지만 대신 크기를 조정할 수 있습니다. 이것은 파일을 저장하는 모델에 들어갑니다.

관련 문제