2

J'ai une application web dans laquelle les utilisateurs peuvent télécharger un avatar de moins de 700kb. C'est la seule partie de l'application traitant du téléchargement d'images (donc je ne traiterai pas avec une charge exceptionnellement lourde). Je me demandais quelle est la meilleure façon d'y arriver. Actuellement, j'utilise Paperclip et je ne veux pas stocker toutes les images sur Amazon S3.Quelle est la meilleure route à suivre pour télécharger des images de mon application Rails vers Amazon S3?

Option 1: L'utilisateur télécharge l'image sur mon serveur Web. L'image est traitée de manière asynchrone en utilisant un travail retardé et est ensuite téléchargée sur s3. L'image est ensuite supprimée de mon serveur Web.

Option 2: L'utilisateur télécharge l'image directement sur s3. Un processus d'arrière-plan sur mon serveur Web télécharge l'image, la traite et télécharge les vignettes nouvellement créées sur s3.

L'option 1 semble utiliser globalement moins de bande passante. L'option 2 semble sauver mon application des ressources nécessaires pour que l'image soit directement téléchargée.

Ai-je raison dans ces hypothèses? Quelle option est la plus rapide et la plus conviviale pour les ressources? Ou y a-t-il un autre moyen d'y parvenir? En outre, je me demandais si des sites comme Twitter, FB et Posterous traitent les images de manière asynchrone. Chaque fois que je télécharge une photo de profil sur Twitter, ou des images sur FB et Posterous, elles semblent être traitées instantanément.

Merci!

Tim

Répondre

1

Si par "l'image de traitement", vous voulez dire la création de vignettes ou d'autres options de conversion d'image, vous pouvez le faire en utilisant paperclip. Si le traitement est une tâche énorme qui ne peut être accomplie en utilisant un trombone seul, alors j'irais avec l'option 1, moins chère car vous n'accédez pas à S3 plusieurs fois. Assurez-vous simplement que vous avez suffisamment d'espace disque pour toutes les images pendant le traitement.

2

Le mieux est que l'utilisateur télécharge directement à S3. Le plugin d2s3 fonctionne bien pour cela.

Dans votre rappel d2s3, créez un événement delayed_job pour télécharger les images en taille réelle et les enregistrer sous forme de miniatures dans S3 avec Reduced Redundancy Storage. Si vous branchez tout correctement, vous pouvez automatiquement générer des vignettes quand et si elles sont jamais perdues à partir de S3.

0

Si vous finissez par aller la route de télécharger directement à S3 qui déleste le travail de votre serveur Rails, s'il vous plaît vérifier mes exemples de projets:

Exemple de projet à l'aide de Rails 3, Flash et MooTools-base FancyUploader à télécharger directement à S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

Exemple de projet en utilisant Rails 3, flash/Silverlight/GoogleGears/BrowserPlus et Plupload basé sur jQuery pour télécharger directement à S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

par ailleurs, vous pouvez faire le post-traitement avec Paperclip en utilisant quelque chose comme ce blog décrit:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

Questions connexes