Rails Paperclip & amp; Plusieurs téléchargements de fichiers
Je suis à la recherche d'une solution pour donner à l'utilisateur la possibilité de télécharger plusieurs images à travers un file_field. J'ai regardé dans les options telles Jquery File Upload et Uploadify mais n'ai pas encore rencontré de bons exemples avec une solution de travail.
J'ai déjà plusieurs images d'installation,
has_attached_file :asset,
:styles => { :large => "640x480", :medium => "300x300", :thumb => "100x100" },
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "/:contributor_id/:listing_name/:filename"
Maintenant je suis à l'affichage de 5 file_fields
def new
@listing = Listing.new
5.times {@listing.assets.build }
respond_to do |format|
format.html # new.html.erb
format.json { render json: @listing }
end
end
Je voudrais avoir
<%= f.file_field :asset, :multiple => true %>
Qui permet à l'utilisateur de sélectionner plusieurs fichiers dans le navigateur de fichiers. Mais comment puis-je traiter ces avec un modèle imbriqué? Et obtenir le téléchargement.
source d'informationauteur kcollignon
Vous devez vous connecter pour publier un commentaire.
Il y a donc quelques questions ici.
Première, en forme de Trombone du
has_attached_file
méthode n'est pas une association de plusieurs fichiers. Il semble que vous essayez de construire un "actif", comme si c'est un Rails de l'association. Tous Trombone n'est de mettre un couple de champs dans votre tableau pour stocker des méta-données sur le fichier et vous obtenez un fichier joint par la déclaration dehas_attached_file
. Si vous souhaitez joindre 5 fichiers, vous aurez besoin de faire quelque chose comme:OU, alternativement, vous pouvez créer un autre modèle juste pour stocker les fichiers. Par exemple:
De cette façon, vous pourriez avoir de multiples atouts attachés l'un à l'inscription (vous n'avez pas de dire ce que l'objet d'origine a été donc j'ai simplement appelé "liste").
Deuxième, il n'y a pas une telle chose comme un télécharger plusieurs fichiers en HTML (et, à ce titre, le
file_field
méthode ne prend pas:multiple => true
argument. Vous aurez à utiliser quelque chose au-delà de Rails intégrés dans la gestion des formulaires, si vous voulez multiples de téléchargement de fichiers. Uploadify est un choix décent (que j'ai utilisé avant). Il y a un bijou qui va transformer les champs de fichier à utiliser uploadify (et à l':multiple => true
de la syntaxe que vous voulez): https://github.com/mateomurphy/uploadify_rails3/wiki. Cependant, je ne peux pas se porter garant pour la façon dont il est.Mon conseil serait de commencer l'étape-par-étape. Le téléchargement via Flash de Rails peut être un processus compliqué qui consiste à traiter le CSRF meta-tag et d'autres champs de votre formulaire. Commencez par faire un formulaire qui permet à un utilisateur de télécharger un fichier et le stocke par un Trombone. Alors peut-être briser le
has_attached_file
déclaration dans un autre modèle, de sorte que vous pouvez avoir 1 ou plusieurs fichiers associés à un modèle (comme indiqué dans le multi-modèle de bloc de code ci-dessus). Ensuite, essayez d'ajouter Uploadify ou d'une autre alternative. Ernie Miller a un bon tutoriel sur l'intégration de Uploadify: http://erniemiller.org/2010/07/09/uploadify-and-rails-3/.Pour commencer, rappelez-vous que
has_attached_file
ne pouvez joindre un fichier. Lorsque vous essayez d'appeler@listing.assets
il n'est pas "actif". Il est un actif. Vous devez créer un modèle distinct, vous-même et de l'utilisation de Rails pour les associations si vous souhaitez utiliser plusieurs fichiers.Accepté de répondre à dit il n'y a pas une telle chose comme un télécharger plusieurs fichiers en HTML.
Cela vous permet de sélectionner plusieurs images et de les envoyer sous forme de tableau.
Si vous avez de la relation
Dog has_many Images
etImage has_attachment :file
le faire pour obtenir plusieurs images à télécharger à la fois:Dans votre code html.erb
Dans votre contrôleur
Dans votre modèle de Chien
C'est en supposant que vous êtes déjà en mesure de télécharger une image mais que vous souhaitez mettre à niveau à plusieurs images à la fois. Notez que le temps d'attente augmente.
Pour aider à réduire les temps d'attente, peep mon post sur cette question liée à la vitesse de téléchargement.