私は現在、paperclipとaws-s3の宝石を使用して写真イメージを作成する作業写真アップローダを持っています。ローダは、写真のアップロードフィールドを動的に追加することもできるため、1回の送信で複数のファイルを一度にアップロードすることができます。私がしたいのは、そのファイルに写真が含まれているとの期待を持ってzipファイルをアップロードし、サムネイル、中サイズ、および単一の写真ファイルのアップロードが行われる元の画像を作成する同じプロセスを実行するオプションがあることです。私のモデルとコントローラはかなりまっすぐ進む生産場合、ビューテンプレートを使用して装飾性に少しだけで、開発の場合、またはS3上でローカルに写真を保存している:写真を含むzipファイル用のPaperclipとAmazon S3を使用
photo.rb
class Photo < ActiveRecord::Base
belongs_to :album
if AppConfig['s3']
has_attached_file :data,
:styles => {
:thumb => "100x100>",
:medium => "500x500>"
},
:storage => :s3,
:default_style => :original,
:bucket => AppConfig['s3']['bucket_name'],
:s3_credentials => { :access_key_id => AppConfig['s3']['access_id'], :secret_access_key => AppConfig['s3']['secret_key'] },
:s3_headers => { 'Cache-Control' => 'max-age=315576000', 'Expires' => 10.years.from_now.httpdate },
:path => "/:class/:id/:style/:filename"
else
has_attached_file :data,
:styles => {
:thumb => "100x100>",
:medium => "500x500>"
},
:storage => :filesystem,
:default_style => :original
end
end
* photos_controller.rb *
class Admin::PhotosController < Admin::AdminController
def index
@photos = Photo.all
end
def show
@photo = Photo.find(params[:id])
end
def new
@photo = Photo.new
end
def create
@photo = Photo.new(params[:photo])
if @photo.save
flash[:notice] = "Successfully created photo."
redirect_to [:admin, @photo]
else
render :action => 'new'
end
end
def edit
@photo = Photo.find(params[:id])
end
def update
@photo = Photo.find(params[:id])
album = @photo.album
if @photo.update_attributes(params[:photo])
flash[:notice] = "Successfully updated photo."
redirect_to [:admin, @photo]
else
redirect_to edit_admin_album_url(album)
end
end
def destroy
@photo = Photo.find(params[:id])
album = @photo.album
@photo.destroy
flash[:notice] = "Successfully destroyed photo."
redirect_to edit_admin_album_url(album)
end
end
ビューの興味深い部分現在地:
* _fo rm.html.haml *
#photos
- if @album.new_record?
= render :partial => 'photo', :locals => { :form => f, :photo => @album.photos.build }
- else
- for photo in @album.photos
.photo
= link_to(image_tag(photo.data(:thumb)), photo.data(:medium), :class => 'photo_link')
- f.fields_for @album.photos do |photo_field|
/Viewable?
/= photo_field.check_box :viewable
%br
= link_to "Delete", [:admin, photo], :confirm => 'Are you sure?', :method => :delete
.float_clear
= add_object_link("New Photo", f, @album.photos.build, "photo", "#photos")
.row
= submit_tag "Save", :disable_with => "Uploading please wait..."
.float_clear
* _photo.html.haml *
.photo_form
%p
- form.fields_for :photos, photo, :child_index => (photo.new_record? ? "index_to_replace_with_js" : nil) do |photo_form|
= photo_form.file_field :data
= link_to_function "delete", "remove_field($(this), ('.photo_form'))"
%br
すべてのアイデアや貢献を歓迎!ありがとう!
回答ありがとうございました。私はherokuに展開されたアプリを持っていて、DJプロセスの代金をむしろ支払うつもりはなく、cronは1日1回しか利用できません。 zip(アーカイブ)ファイル用に別々のs3バケットを作成し、コールバックでそれらを処理するようにします。 –
私はそれが正しいクリスを理解することができます。それは確かにその考えを回避するための一つの方法です。運が良かった! –