J'ai actuellement un uploader de photos qui crée des images photo en utilisant des trombones et des gemmes aws-s3. Le chargeur peut également ajouter dynamiquement des champs de téléchargement de photos afin que plusieurs fichiers puissent être téléchargés en même temps sur un seul envoi. Ce que je voudrais faire est d'avoir la possibilité de télécharger un fichier zip en espérant que le fichier contienne des photos et qu'il fonctionne avec le même processus de création de vignettes, de taille moyenne et d'images originales que le téléchargement d'un seul fichier photo . Mon modèle et le contrôleur est assez simple avec le stockage de photos localement si sur le développement, ou sur s3 si la production, avec juste un peu sur fanciness avec le modèle de vue:Utilisation de Paperclip et d'Amazon S3 pour le fichier zip contenant des photos
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
les parties intéressantes de la vue sont ici:
* _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
Bienvenue toutes les idées ou contributions! Merci!
Merci pour la réponse Jon. J'ai l'application déployée sur heroku et préfère ne pas payer pour le processus de DJ et cron n'est disponible qu'une fois par jour. Je vais essayer de créer un seau s3 séparé pour les fichiers zip (archive) et les post-traiter avec un rappel. –
Je peux comprendre ça, Chris. C'est certainement une façon de contourner cette pensée. Bonne chance! –