Télécharger des fichiers directement sur S3 avec Paperclip et Dropzone.js

Ce sont généralement les petites tâches qui prennent du temps qui nous frustrent le plus. Par exemple, le téléchargement d'un fichier sur S3 ; l'exigence est assez simple, mais la méthode choisie pour télécharger le fichier déterminera l'efficacité de la tâche. Comme le téléchargement de fichiers est une fonctionnalité dont la plupart des applications ont besoin, RailsCarma a compilé un bref tutoriel sur l'une des meilleures méthodes pour réaliser cette tâche efficacement : en utilisant Paperclip et Dropzone.js.

  • Trombone est un choix populaire pour le téléchargement d'images et de fichiers car il offre d'excellentes fonctionnalités pour gérer les pièces jointes ; la gemme "paperclip" est la meilleure option. Paperclip vous permet de télécharger plusieurs images et fichiers, de générer des vignettes et même de redimensionner automatiquement les images. Il bénéficie d'une communauté importante et active, ce qui en fait le premier choix de la plupart des développeurs.
  • Dropzone.js est une bibliothèque open source avec des fonctions de glisser-déposer de fichiers (avec aperçu de l'image).
  • Amazon S3 est un simple dispositif de stockage de données. On peut l'utiliser pour récupérer des images et tous types de fichiers.

Pourquoi Paperclip ?

Paperclip est un outil de téléchargement de fichiers populaire pour les raisons suivantes :

  • Prise en charge de la mise en cache des fichiers :
    Si un formulaire n'est pas validé, nous ne voulons pas que l'utilisateur doive reprendre son fichier et le télécharger à nouveau. La mise en cache des fichiers est donc nécessaire du point de vue de l'ergonomie. Elle permet également d'économiser la bande passante.
  • Processus Images
    Paperclip est capable de redimensionner et de recadrer les images dans plusieurs formats différents, ce qui permet au développeur de choisir la bibliothèque.
  • Simplifie la tâche !
    Paperclip gem ne pollue pas votre code et est facile à tester !
  • Permet le traitement des fichiers
    Paperclip permet le traitement des fichiers pour l'extraction des données EXIF et la création de vignettes pour les PDF, PSD, DOC et XLSX téléchargés.
  • Fournit un support pour les services CDN et de stockage 
    C'est un grand avantage car nous voulons maintenir la bande passante vers nos serveurs aussi basse que possible et éviter toute perte de données due à une défaillance du serveur.
  • Traitement à la volée
    Paperclip traite les images et les fichiers en fonction des demandes. Il s'agit d'une fonctionnalité innovante qui permet aux développeurs de créer un contenu personnalisé qui s'adapte au mieux aux différentes situations.

Que sont les événements asynchrones de la Dropzone ?

  • fichier ajouté :  Lorsqu'un fichier est ajouté à la liste.
  • fichier enlevé : Utilisé lorsqu'un fichier est supprimé de la liste. Vous pouvez l'écouter et supprimer le fichier de votre serveur si vous le souhaitez.
  • vignette : Lorsque la vignette a été générée. Il reçoit l'URL des données comme deuxième paramètre.
  • erreur : En cas d'erreur, le message d'erreur est reçu comme deuxième paramètre. Et si l'erreur est due à xmlhttprequest, l'objet xhr est reçu comme troisième paramètre.
  • traitement : Lorsqu'un fichier est traité (en raison de la présence d'une file d'attente, tous les fichiers ne sont pas traités immédiatement). Cet événement s'appelait auparavant processingfile.
  • baisse : L'utilisateur a déposé un objet dans la zone de dépôt.

Comment configurer Paperclip dans notre application ?

  • has_attached _file : asset
  • :storage => :s3
  • :S3_host_name => ENV["S3_HOST_NAME"]
  • :S3_region => ENV["S3_REGION"]
  • :S3_protocol => ENV["S3_PROTOCOL"]
  • :path => ":account_id/:class/:source_id/:attachment/:file_name",:s3_headers => {'ContentDisposition' => 'attachment', 'content-type' => 'application/octet_stream'},
    :bucket => ENV["S3_BUCKET"],
    :s3_credentials => Proc.new{|a| a.instance.s3_credentials}
  • Do_not_validate_attachment_file_type :asset
  • def s3_credentials
    {:access_key_id => ENV["S3_ACCESS_KEY_ID"], :secret_access_key => ENV["S3_SECRET_ACCESS_KEY"]}

fin

Comment gérer les chemins d'accès personnalisés dans notre application ?

Paperclip.interpole :attachment do |attachment, style|Image_extension = ["jpg", "jpeg", "gif", "png", "PNG", "GIF", "JPEG", "JPG"]
extname = File.extname(attachment.instance.asset_file_name).downcase.gsub(/\./, '')
if img_extension.include ? (extname)
return "images"
else
return extname
fin
fin
Paperclip.interpole :nom_de_fichier do |attachement, style|nom_de_fichier = attachement.instance.nom_de_fichier_du_bien
Fin

Les données contenues dans le seau S3 peuvent être récupérées à tout moment. Mais il y a une limitation : la gestion des chemins d'accès personnalisés pour différentes structures de répertoires peut être assez lourde. Paperclip peut s'avérer utile dans de telles situations. Il s'agit d'un excellent outil pour télécharger et stocker des images dans un seau S3 à l'aide d'AWS.

À RailscarmaNous développons et fournissons des services d'applications web de pointe en utilisant les frameworks de Ruby pour nos clients dans le monde entier.
Vous souhaitez des solutions innovantes pour tout autre problème lié au développement des rails ? Prenez contact avec nous!

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench