Direkte Uploads zu S3 mit Carrierwave

7

Ich habe vor kurzem die folgenden Schritte von der Verwendung von Paperclip zu Carrierwave beim Hochladen auf Amazon S3 konvertiert, damit ich das carrierwave_direct-Juwel und dann Sidekiq oder ein anderes Hintergrundverarbeitungs-Juwel verwenden kann.

%Vor%

/views/releases/track_upload.html.erb

%Vor%

Carrierwave-Uploads funktionieren, aber ich kann nicht herausfinden, wie der direkte Teil funktioniert. Teilweise weil ich nicht herausfinden kann, wie man den vorgeschlagenen Formularcode einbaut:

%Vor%

Oder wo in meinem Track OR Release Controller stelle ich den vorgeschlagenen:

%Vor%

Die Readme Ссылка und Railscast Ссылка zeigen beide auf das Hochladen Ihrer Datei und dann auf das Erstellen Ihres Datenbankeintrags. In meiner App existieren die db-Einträge bereits. Der Railscast sagt zwar, dass es möglich ist, geht aber nicht durch. Das ist also das erste Problem.

Zweitens muss ich mehr als eine Datei gleichzeitig hochladen. Der obige Code erreicht das, aber sehr langsam und macht meine App natürlich ziemlich nutzlos.

Kann jemand helfen? Massiver Dank im Voraus!

    
Raoot 04.10.2012, 10:00
quelle

1 Antwort

20

Zuerst würde ich Ihnen raten, carrierwave_direct nicht zu benutzen, ich mag dieses Juwel aus vielen Gründen nicht wirklich. Einer dieser Gründe ist, wie es in den Dokumenten gesagt wird

  

Bitte beachtet, dass dieses Juwel nur Single unterstützt   Datei-Uploads Wenn Sie mehrere Dateien gleichzeitig hochladen möchten   Sie müssen ein Javascript oder Flash-Uploader verwenden.

Aber wenn Sie es verwenden möchten, hier ist, was ich denke, müssen Sie tun:

Also zuerst über das

%Vor%

Es scheint, dass Sie versuchen, Tracks hochzuladen, und wie Sie bereits sagten, dass Ihre Modelle bereits erstellt wurden, schätze ich, dass Sie versuchen, neue Tracks für eine bestehende Version hochzuladen. Korrigiere mich, wenn ich falsch liege.

Also sollten Sie die @uploader var in der Methode #track_upload Ihrer ReleasesController erstellen.

%Vor%

Dann können Sie in der verknüpften Ansicht (/views/releases/track_upload.html.erb) die Datei direct_upload_form

verwenden %Vor%

Das Formular lädt die Datei direkt nach dem Auswählen der Datei direkt in s3 hoch. Dann weiß ich nicht genau wie, aber carrierwave_direct sollte dir die URL der hochgeladenen Datei zurückgeben. Ich bin mir da nicht sicher, da ich noch nie so weit war, aber die Idee ist, dass Ihre Datei gerade in s3 hochgeladen wurde, jetzt muss sie mit Ihrem Modell verknüpft werden, damit die Datei nicht verloren geht ". Also vielleicht macht carrierwave_direct Dinge alleine (ich bezweifle das ...), indem ich Ajax-Anfragen oder irgendetwas anderes mache.

Wenn Sie mehr als eine Datei hochladen möchten, möchte ich Sie auf eine verweisen Tutorial schrieb ich kürzlich

Hier sehen Sie, wie Sie Dateien direkt auf s3 hochladen, ohne carrierwave_direct, aber indem Sie selbst Dinge tun. Dies erfordert ein wenig mehr Code und Zeit, aber Sie haben mehr Kontrolle darüber, was passiert.

In Ihrem Fall sollten Sie das Formular, das ich in meinem Lernprogramm verwende, in Ihrer Ansicht in der Ansicht /views/releases/track_upload.html.erb einfügen. Wenn Sie dann eine Datei auswählen, erhalten Sie von der erfolgreichen AJAX-Anfrage (vom jQueryFileUpload-Plugin) die URL der hochgeladenen Datei, sodass Sie sie in Ihrem Track-Modell speichern können (Sie möchten wahrscheinlich eine neue AJAX-Anfrage senden) an Ihren Server, um das neue Track-Modell zu erstellen oder um ein anderes Formular auf der Seite zu füllen, wie das, das Sie in der Datei /views/releases/track_upload.html.erb verwendet haben, und dann werden die Tracks beim Senden gespeichert. ) Ich bin mir nicht sicher, ob mir das wirklich klar ist, lass es mich wissen, wenn du mehr Erklärungen brauchst.

Und das Gute daran ist, dass wenn Sie einfach multiple zu Ihrer Dateieingabe hinzufügen, dann die unglaubliche jQueryFileUpload Plugin sendet eine Anfrage pro Datei an s3, dann erhalten Sie die URLs der hochgeladenen Dateien in jedem Ajax Ergebnisse: D

Und Sie können Dinge optimieren, um Fortschrittsbalken hinzuzufügen, und solche Dinge können Sie mit dem jQuery-Plugin wirklich tolle Sachen erstellen.

Ich hoffe, es wird dir helfen!

    
pjam 08.10.2012 21:49
quelle