2017-07-21 11 views
1

ペーパークリップとレールを使用してアップロードする画像のパスを変更する方法を教えてください。パスをバケツのgov_idフォルダの中に入れて、画像がサブフォルダなしでそのまま残ります。そして、また、どのようにこの形式に従って画像のURLを作成するには:Amazon S3でアップロードした画像のパスをPaperClip in Railsで変更します

class Attachment < ApplicationRecord 
     belongs_to :attachable, polymorphic: true 
     has_attached_file :image, :styles => {:thumb => "200x200#"}, 
         :storage => :s3, 
     validates_attachment :image, content_type: { content_type:  ["image/jpg", "image/jpeg", "image/png"] } 
     validates_attachment :image, presence: true 

     before_save :rename_file 

     def rename_file 
      extension = File.extname(image_file_name).gsub(/^\.+/, '') 
      new_image_file_name = "gov_#{self.attachable.reference_code}.#{extension}" 

      image.instance_write(:file_name, new_image_file_name) 
     end 
    end 

:私はこのようになります添付モデルを持って、私は私のバケット内gov_idフォルダを持っている

:「https://s3-ap-southeast-1.amazonaws.com/BUCKET_NAME/GOV_ID/IMAGE_NAME.EXTENSION」 注意バケットにアップロードされた画像は保存されますが、gov_idフォルダには保存されません。添付ファイル/ images/000/000/013/originalに行きます URLは「s3-ap-southeast-1.amazonaws.com/BUCKET_NAME/attachments/images/000/000/013/original/gov_UG2S463C.png」になります。 1500620951

答えて

0

問題は、あなたがそれに新しい名前を割り当てしようとしていると、後続していますが、S3が理解できる形式でこれを行うには、それを言っていないしていることである。

あなたは覚えているものであり、 s3バケットは、キーオブジェクトに基づいて動作します。s3バケットを見ると、フォルダ構造はほとんどの場合show用です。ファイルパス(ファイル名を含む)は基本的にキーです。オブジェクトはそこに格納されているイメージです(t彼の場合)。

だから、あなたは画像を割り当てているキーは、デフォルトのクリップパス(ソース: paperclip docs)である。このブロックで:file_name

で終わる、

has_attached_file :image, :styles => {:thumb => "200x200#"}, 
        :storage => :s3, 

あなたは最後にカンマを持っていますあなたのhas_attached_fileのうち、bucket_name:のようなものを削除したことを意味すると思います(これは問題ありませんが、next_timeは、重要な情報をプレースホルダの名前に置き換えます)。

s3オブジェクトへのアクセスに使用されるキーには、path:シンボルが関連付けられている必要があります。通常、paperclipはこれを自動的に生成しますが、ここでは手動で割り当てます。あなたは「000/000/001」は、その後:path => "/gov_id/:class/:attachment/:id_partition/:style/:file_name"

を入れて、私はあなたがそれをするように、そこにスタイルを持ちたいと仮定したい場合

has_attached_file :image, :styles => {:thumb => "200x200#"}, 
          :storage => s3, 
          :path => "/gov_id/:class/:attachment/:style/:file_name" 

:だから、このような何かを追加することができるはずオリジナルと:thumbスタイルの両方を適切に扱います。

has_attached_file :image, :styles => {:thumb => "200x200#"}, 
          :storage => s3, 
          :path => "/gov_id/:class/:attachment/:style/:replaced_file_name" 

Paperclip.interpolates :replaced_file_name do 
    extension = File.extname(image_file_name).gsub(/^\.+/, '') 
    new_image_file_name = "gov_#{self.attachable.reference_code}.#{extension}" 

    new_image_file_name 
end 

また、代わりにbefore_saveを使用して、あなたのようなPaperclip.interpolates

何かに見たいと思うかもしれません