[RUBY] So laden Sie Bilder von AWS S3 herunter (Rails, Carrierwave)

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

Schritt 1 Verwenden Sie keine japanischen Dateinamen mehr

Wenn der veröffentlichte Dateiname Japanisch enthält, ist die nachfolgende Verarbeitung schwierig. Mit gem'carrierwave 'können Sie die Datei wie offiziell angegeben umbenennen. Beginnen wir also von dort aus. In meinem Fall habe ich beschlossen, den Dateinamen als zufälliges alphanumerisches Zeichen zu speichern. Verwenden Sie beim Speichern nicht die aktuelle Zeit. Beim Ändern der Größe ist die Zeit ausgeschaltet und es tritt ein Fehler auf.

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

Wenn Sie auf diese Weise schreiben, wird der angegebene Dateiname in zufälligen alphanumerischen Zeichen gespeichert. Obwohl der Dateiname nur mit dem Dateinamen geändert wurde, funktionierte der Zugriff auf S3 nicht, wurde jedoch durch Hinzufügen von def secure_token behoben.

Schritt 2 Richten Sie das Routing ein

routes.rb


  resources :posts do
    member do
      get :download
    end
  end

Schritt 3 Schreiben Sie die Download-Methode in den Controller

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

Da mein Level ein Anfängerlevel ist, denke ich, dass die Beschreibung eine Verschwendung enthält, aber bitte vergib mir.

Bis der Fehler und die Lösung aufgetreten sind

Als der Dateiname zum ersten Mal einen japanischen Namen enthielt, war beim Hochladen nichts auszusetzen. Als ich jedoch die Download-Methode schrieb und versuchte, sie herunterzuladen, wurde 502 Zugriff verweigert angezeigt. Dieser 502 ist umständlich und ich dachte zuerst, ich hätte keinen Zugriff auf AWS, aber wenn ich ihn hochladen könnte, sollte ich Zugriff haben. Weitere Untersuchungen haben ergeben, dass 502 angezeigt wird, auch wenn die URL nicht gefunden wird. Darüber hinaus stellte sich heraus, dass die Ursache die japanische Notation war. Dies ist wahrscheinlich der Grund, warum es sich beim Herunterladen auf Image-Posting-Sites häufig um eine zufällige alphanumerische Datei handelte.

Recommended Posts

So laden Sie Bilder von AWS S3 herunter (Rails, Carrierwave)
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
So speichern Sie Bilder auf Heroku in S3 unter AWS
[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
[Schienen] Wie poste ich Bilder?
[Hinweis] Von S3 herunterladen, auf S3 hochladen
[Rails] Wie man von erb zu haml konvertiert
So verknüpfen Sie Rails6 Vue (aus dem Umgebungsbau)
So geben Sie die von Rails erstellte CSV in S3 aus
Wie schreibe ich Rails
So deinstallieren Sie Rails
Führen Sie auf, wie Sie in AWS von Docker zu AKS lernen können
Umgang mit hochgeladenen Bildern
Wechsel von AWS zu PaizaCloud
[Schienen] Speichern Sie Bilder mit Carrierwave
[Rails] Verwendung von Enum
So minimieren Sie Java-Images
[Rails] Verwendung von Enum
Wie man Schienenrouten liest
So beenden Sie den Rails-Server
Wie schreibe ich Rails Seed
[Rails] Verwendung der Validierung
[Schienen] So deaktivieren Sie Turbolinks
[Rails] So verwenden Sie authenticate_user!
[Rails] So implementieren Sie Scraping
[Schienen] Wie man Samen macht
Wie schreibe ich Rails Routing
[Rails] So installieren Sie simple_calendar
[Rails] So installieren Sie reCAPTCHA
[Schienen] Verwendung von Scope
So schreiben Sie eine Migration vom Rails-Datums- / Uhrzeittyp zum Datumstyp
[Rails 5] Verwendung von gem gon ~ Übergabe von Variablen von Rails an JS ~
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
[Rails] Wie man Edelstein "devise" benutzt
So verhindern Sie, dass vergangene Daten in Rails-Formularen eingegeben werden
[Schienen] Verwendung von Geräten (Hinweis)
[Rails] Verwendung von Flash-Nachrichten
[Rails] Anzeigen von Datenbankinformationen
[Schienen] So verhindern Sie den Bildschirmübergang
So stellen Sie Bootstrap auf Rails bereit
[Rails] So beschleunigen Sie das Docker-Compose
[Schienen] So fügen Sie neue Seiten hinzu
Speichern Sie das Twitter-Symbol in s3
[Hinweis] Von S3 herunterladen, auf S3 hochladen
Bild hochladen, um Heroku S3 nachzufüllen
Bild hochladen, um Heroku S3 nachzufüllen
[Rails] Wie schreibe ich eine Ausnahmebehandlung?