Ich habe derzeit eine funktionierende Foto-Uploader, die Fotobilder mit Büroklammer und aws-s3 Edelsteine erstellt. Der Loader kann auch Foto-Upload-Felder dynamisch hinzufügen, sodass mehrere Dateien gleichzeitig bei einem einzigen Upload hochgeladen werden können. Ich möchte die Möglichkeit haben, eine Zip-Datei mit der Erwartung hochzuladen, dass die Datei Fotos enthält, und dass ich denselben Prozess zum Erstellen von Miniaturansichten, mittelgroßen Bildern und Originalbildern ausführen muss, den der Upload der einzelnen Fotodateien durchläuft . Mein Modell und Controller sind ziemlich geradlinig mit Fotos vor Ort, wenn auf Entwicklung zu speichern, oder auf s3, wenn die Produktion, mit nur ein wenig auf fanciness mit der Ansicht Vorlage:Verwenden von Paperclip und Amazon S3 für zip-Datei mit Fotos
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
die interessanten Teile der Ansicht sind hier:
* _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
Willkommen alle Ideen oder Beiträge! Vielen Dank!
Danke für die Antwort Jon. Ich habe die App auf Heroku installiert und möchte lieber nicht für den DJ-Prozess bezahlen und cron ist nur einmal am Tag verfügbar. Ich werde versuchen, einen separaten s3-Bucket für zip (Archiv) -Dateien zu erstellen und diese mit einem Callback zu bearbeiten. –
Ich kann das gut Chris verstehen. Das ist definitiv eine Möglichkeit, diesen Gedanken zu umgehen. Viel Glück! –