[RUBY] Comment télécharger des images depuis AWS S3 (rails, carrierwave)

environnement ruby2.6.5 rails5.2.4 gem 'carrierwave' gem 'fog-aws'

Étape 1 Arrêtons d'utiliser les noms de fichiers japonais

Si le nom de fichier publié contient du japonais, le traitement ultérieur sera difficile. Avec gem'carrierwave ', vous pouvez renommer le fichier comme indiqué officiellement, alors commençons par là. Dans mon cas, j'ai décidé de sauvegarder le nom du fichier sous forme de caractère alphanumérique aléatoire. N'utilisez pas l'heure actuelle lors de l'enregistrement. Lors du redimensionnement, l'heure sera désactivée et une erreur se produira.

image_uploader.rb



  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end

En écrivant de cette manière, le nom du fichier publié sera enregistré en caractères alphanumériques aléatoires. Bien que le nom de fichier ait été modifié avec uniquement le nom de fichier, l'accès à S3 n'a pas fonctionné, mais il a été résolu en ajoutant def secure_token.

Étape 2 Configurer le routage

routes.rb


  resources :posts do
    member do
      get :download
    end
  end

Étape 3 Écrivons la méthode de téléchargement dans le contrôleur

posts_controller.rb



  def download
    url = URI.encode(@post.image.url)
    data_path = open(url)
    send_data data_path.read, disposition: 'attachment',
    type: @post.image_type
  end

Puisque mon niveau est un niveau débutant, je pense qu'il y a un gaspillage dans la description, mais pardonnez-moi s'il vous plaît.

Jusqu'à ce que l'erreur et la résolution rencontrées

Lorsque le nom de fichier contenait pour la première fois un nom japonais, il n'y avait aucun problème avec le téléchargement. Cependant, lorsque j'ai écrit la méthode de téléchargement et essayé de la télécharger, l'accès 502 refusé était affiché. Ce 502 est gênant et au début, je pensais que je n'avais pas accès à AWS, mais si je pouvais le télécharger, je devrais y avoir accès. Une enquête plus approfondie révèle que 502 est affiché même si l'URL n'est pas trouvée, En outre, il s'est avéré que la cause était la notation japonaise. C'est probablement la raison pour laquelle il s'agissait souvent d'un fichier alphanumérique aléatoire lors du téléchargement sur les sites de publication d'images.

Recommended Posts

Comment télécharger des images depuis AWS S3 (rails, carrierwave)
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Comment enregistrer des images sur Heroku dans S3 sur AWS
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
[rails] Comment publier des images
[Note] Télécharger depuis S3, télécharger vers S3
[Rails] Comment convertir ERB en Haml
Comment lier Rails6 Vue (à partir de la construction de l'environnement)
Comment sortir le CSV créé par Rails vers S3
Comment écrire des rails
Comment désinstaller Rails
Indiquez comment apprendre de Docker à AKS sur AWS
Comment gérer les images téléchargées
Passer d'AWS à PaizaCloud
[Rails] Enregistrez des images à l'aide de carrierwave
[Rails] Comment utiliser enum
Comment réduire les images Java
[Rails] Comment utiliser enum
Comment lire les itinéraires des rails
Comment terminer le serveur de rails
Comment écrire des graines de Rails
[Rails] Comment utiliser la validation
[Rails] Comment désactiver les turbolinks
[Rails] Comment utiliser authenticate_user!
[Rails] Comment mettre en œuvre le scraping
[Rails] Comment faire des graines
Comment écrire le routage Rails
[Rails] Comment installer simple_calendar
[Rails] Comment installer reCAPTCHA
[Rails] Comment utiliser Scope
Comment écrire une migration du type Rails datetime au type date
[Rails 5] Comment utiliser gem gon ~ Comment passer des variables de Rails à JS ~
Comment déployer l'application Rails sur AWS (résumé de l'article)
[Rails] Comment utiliser la "devise" des gemmes
Comment empêcher la saisie de dates passées dans les formulaires Rails
[Rails] Comment utiliser l'appareil (Remarque)
[Rails] Comment utiliser les messages flash
[rails] Comment afficher les informations de base de données
[Rails] Comment empêcher la transition d'écran
Comment déployer Bootstrap sur Rails
[Rails] Comment accélérer la composition de docker
[Rails] Comment ajouter de nouvelles pages
Enregistrer l'icône Twitter sur s3
[Note] Télécharger depuis S3, télécharger vers S3
télécharger l'image pour refiler heroku S3
télécharger l'image pour refiler heroku S3
[Rails] Comment écrire la gestion des exceptions?