2012-10-16 3 views
0

메신저는이 응용 프로그램 link을 자습서로 참조합니다. 그것을 본 후에. 프로그램 (클라이언트 또는 서버)이 이미지에 액세스 할 수있는 방법을 이해하는 것이 궁금합니다. 프로그램이 Amazon S3에 업로드되면 서버의 데이터베이스에 명시 적으로 이미지 URL을 저장하는 것으로 보이지 않으므로?paperclip & aws gems - 사진 공유 앱 어디에서 paperclip/aws에 저장된 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 

답변

1

그것은 has_attached_file에 대한 옵션 바로 거기 : 여기

는 사진 모델 방법이다. 이미지의 경로 (s3의 파일 이름에 해당)를 :path 인수에 구성하는 방법에 대해 설명했습니다. 그래서 모든 클립이 이미지를 다시 찾기 위해 알 필요가있다 :

  1. 당신의 S3 버킷
  2. 경로를 다시 구성 할 수있는 관련 정보에 대한 호스트 이름 - :basename, :prefix처럼 보이는이 경우에는, :style:extension.

대부분의 정보는 데이터베이스에 있습니다. 아마도 :basename은 이미지가 첨부 된 모델의 image_file_name 필드에 저장되어야하는 원본 파일 이름에서 온 것 같습니다. :style은 런타임에 어떤 이미지 크기를보고 있는지에 따라 다릅니다. :extensionimage_content_type 속성에서 확인할 수 있습니다.

:prefix 조금 더 까다 롭습니다. 실제로 접두어를 구성하는 데 사용하는 Date.today 때문에 보간 규칙이 이미지 조회를 중단 할까봐 걱정합니다. 하루 이상 된 이미지가 있습니까? 그렇다면 여전히 작동합니까? 이미지를 업로드 할 때 해당 날짜의 날짜가 포함 된 파일 이름을 갖게 될 것이므로 나중에 찾으려고 할 때 새 날짜를 사용하여 URL을 다시 구성하고 현재 날짜가이고 403 오류.

TL : DR paperclip은 이미지를 s3으로 업로드 할 때 이미지 url을 구성하고 나중에 동일한 매개 변수에서 이미지를 재구성합니다.

+0

머리에 손톱이 맞았습니다. : 접두사가 exatcly 경로를 재구성하는 문제를 일으키는 원인이되었습니다! 1 일이 넘은 이미지는 검색 할 수 없습니다. 나는 앞으로 가서 그것을 바꿨다. 나는 그것이 어떻게 작동했는지에 대해 혼란 스러웠다. 그러나 이제는 모두 의미가있다. 명확히 해 주셔서 감사합니다. – banditKing

관련 문제