0

클립 및 AWS S3와 관련된 세 가지 질문이 있습니다.종이 클립 사용자 정의 보간 (AWS S3의 사용자 정의 경로)

has_attached_file :attachment, 
    :url => "/songs/:user_id/:basename.:extension", 
    :path => "/songs/:user_id/:basename.:extension" 

URL 및 PATH의 차이는 무엇 : 클립을 가지고 내 모델에서

1)

, 나는 다음 코드 있나요?

2) :basename.:extension은 무엇입니까?

3) 두 모델 (UserFile)이 있다고 가정 해 보겠습니다. User에는 많은 수의 File이 있습니다. 종이 클립 경로 및 URL은 File 모델에서 구성됩니다.

config/initializers/paperclip.rb, 나는 코드 아래에 넣어 :

Paperclip.interpolates :user_id do |attachment, style| 
    attachment.instance.criteria.user_id 
end 

내가 위의 코드가 잘 작동하는지 확인합니다. 파일이 songs/5/song.mp3에 저장됩니다. songs/user_id_5/song.mp3에 mp3 파일을 저장하고 싶습니다. 아래에서 시도했지만 작동하지 않습니다.

Paperclip.interpolates :user_id do |attachment, style| 
    'user_id_' + attachment.instance.criteria.user_id 
end 

내가 원하는대로 만들 수 있습니까? S3 언어 path에서

답변

0
  1. 은 항목의 키이며 urldocs

    • URL에서 당신의 S3 엔드 포인트

경우 : S3의 URL에 대한 네 가지 옵션이 있습니다. 버킷의 이름을 도메인 스타일 (bucket.s3.amazonaws.com) 또는 경로 스타일 (s3.amazonaws.com/bucket)로 지정하도록 선택할 수 있습니다. 당신은 또한으로 지정하는 CNAME을 필요로하는 (A CNAME 을 지정할 수 있습니다. s3_alias_url 당신은 docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html 일반적으로 CNAME이와 S3에 대한 자세한 내용을보실 수 있습니다, 이것은 조금이라도 중요하지 않으며 을 기본값 (경로 스타일 또는 : s3_path_url)으로 둘 수 있습니다. 그러나 경우에 따라 경로가 작동하지 않고 도메인 스타일 (: s3_domain_url)을 사용해야합니다.) 여기서 다른 것은 경로 스타일처럼 취급됩니다.

  • 경로 : 파일이 저장 될 버킷 아래의 키이며 URL은 버킷과 경로로 구성됩니다. 당신은 보간하기를 원할 것입니다. 키는 파일 이름과 같이 고유해야하며 S3 (엄격하게 말하면) 디렉토리를 지원하지 않지만 파일 이름 부분을 분리하기 위해 /를 사용할 수 있습니다.

  • 당신이 당신의 설정에서 bucket 또는 url 구성하고 바로 전달할 수 path (즉,당신이 방법을 호출 할 때) 파일을 저장할 위치를

    config.paperclip_defaults = { 
        storage: :s3, 
        s3_credentials: { 
        bucket: 'mybucket'), 
        access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), 
        secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), 
        s3_region: 'aws_region_id', 
        } 
    } 
    
  • I 당신은 문자열 보간이 필요

  • 모르는

      Paperclip.interpolates :user_id do |attachment, style| 
          "user_id_#{attachment.instance.criteria.user_id}" 
      end 
      
  • +0

    # 3의 경우 문자열이 작동하지 않습니다. 이유를 모르겠다. – JoHksi

    +0

    그래서'has_attached_file' 메쏘드에서': path => ": user_id"... "를 가지고 있다면, path의 값은 무엇입니까? –