Je développe sur iOS et je passe d'un backend PHP à Ruby on Rails. Le format d'échange est JSON .
Une recherche rapide sur Google pour «enregistrer les images dans Rails» a presque tous les résultats parlant de l'enregistrement des données d'image sous forme de blobs dans la base de données. Je peux me tromper, mais j'ai l'impression que l'enregistrement des données d'image dans une base de données est une énorme perte de temps et d'espace (par opposition à l'enregistrement d'un lien vers l'emplacement du fichier ('/img/subcat/4656.png') .
En PHP, il est assez standard de recevoir les données, de générer un nom de fichier, d'enregistrer ce fichier sur le disque et de mettre à jour la base de données avec l'emplacement de l'image sur le disque. Est-ce la même chose pour Ruby on Rails, ou existe-t-il une fonctionnalité d'image ActiveRecord intégrée que je ne connais pas?
la source
Réponses:
J'ai déjà utilisé PaperClip avec Amazon S3 et CloudFront CDN pour une livraison plus rapide. PaperClip prend très bien en charge le stockage S3: consultez leur documentation pour les options de configuration du stockage S3 .
s3_host_alias: assets.example.com
. Cela entraînera les URL générées vers les ressources d'image enregistrées à utiliser votre hôte de distribution CloudFront.config.action_controller.asset_host = http://assets.example.com
. Les URL des ressources Ruby on Rails utiliseront ensuite également votre distribution CloudFront, pour la mise en cache / une livraison plus rapide.C'est assez sommaire, mais j'espère que cela vous oriente vers des ressources utiles. Bien sûr, ce n'est qu'une solution, mais c'est celle qui a fonctionné pour moi dans une situation où je faisais face à des centaines de milliers de pièces jointes d'images dans la base de données.
(En tant qu'étape avancée possible qui peut ne pas être nécessaire ou utile pour votre cas, vous pouvez également configurer plusieurs CNAME pour votre distribution CloudFront, tels que
assets0.example.com
etassets1.example.com
. Les deux tromboness3_host_alias
etaction_controller.asset_host
peuvent alors prendre des lambdas qui vous permettront de déterminer de manière déterministe atout) générer des URL qui utilisent différents hôtes, pour une meilleure parallélisation si vous en téléchargez plusieurs sur la même page, car les navigateurs limiteront le nombre maximal de connexions simultanées au même hôte.)la source
J'ai essayé plusieurs gemmes, mais maintenant j'utilise FineUploader avec PaperClip
FineUploader gère une grande partie de l'interface graphique pour vous, par exemple la progression du téléchargement, le glisser-déposer et plusieurs téléchargements de fichiers, etc. J'utilise PaperClip parce que je veux stocker les images sur mes serveurs plutôt que sur S3.
En règle générale, nous recherchons une solution configurable prête à l'emploi stable au lieu de recréer des éléments à partir de zéro. Avec PaperClip je stocke les images et avec un StateMachine je fais des conversions sur les images et les mets dans une catégorie basée sur le nom de fichier. J'avais la même question que vous, et c'était ma meilleure solution de travail, c'est pourquoi je la partage.
la source