Ich habe eine Möglichkeit hinzugefügt, Dateien von Dropbox über Dropbox Chooser auf meine Site hochzuladen.
Alles funktioniert gut außer einer Sache - ich weiß nicht, wie% code% Funktionalität richtig zu implementieren ist. Es sollte auf diese Weise funktionieren - wenn Sie auf Cancel
klicken, sollte das entsprechende Dateifenster aus der Benutzeroberfläche entfernt und das Hochladen von Dropbox beendet werden.
Wenn der Benutzer auf Cancel
klickt und Datei auswählt und auf Choose from Dropbox
klickt, initiiere ich eine Submit
Anfrage an Rails an eine Methode Ajax
. Bei dieser Methode erhalte ich eine add_file_via_dropbox
für die Dropbox-Datei, die mit Hilfe von URL
gem. Auf Amazon S3
server hochgeladen werden soll.
Wenn der Nutzer auf Paperclip
klickt, möchte ich die teilweise hochgeladene Datei " Cancel
" entfernen, die (nach erfolgreichem Hochladen) in S3
-Attribut gespeichert wird. Aber wenn er auf content.attachment
klickt - eine Datei wird immer noch hochgeladen (sonst wird Cancel
link nicht angezeigt) und ich weiß nicht, wie ich sie sofort löschen kann.
Mein anderer Gedanke ist, dass ich einfach das Cancel
Attribut zu cancelled
hinzufügen kann und dann kein content
anzeigen, wo dieses Attribut == content
ist. Aber dieser Ansatz wird mich nicht davor bewahren, Speicherplatz auf true
zu verschwenden, daher sollte ich einige Hintergrundaufgaben einmal pro Tag ausführen, um Amazon S3
Anhänge zu löschen.
Ich würde es vorziehen, sie nicht auf cancelled
an erster Stelle zu speichern. Ist es möglich? Ich habe darüber nachgedacht, die Controller-Aktion S3
in den Hintergrundjob zu verschieben, damit ich add_file_via_dropbox
es ändern kann, sobald ich kill
ajax-Anfrage von einem Client erhalte. Ich bin ein bisschen verwirrt über all das. Wie würdest du dieses Problem lösen? Danke.
product_form.html.erb
%Vor%product_controller.rb
%Vor%content.rb
%Vor%ZUSÄTZLICH SPÄTER
Ich habe genauer untersucht, wie Paperclip funktioniert:
1) Wenn diese Codezeile ausgeführt wird
%Vor% Dieser Büroklammercode wird von cancel
ausgeführt
Die Datei wird von der angegebenen URL heruntergeladen (Dropbox-URL in meinem Beispiel) und lokal gespeichert (in der temporären Datei auf dem Rails-Server)
2) Diese Datei wird nur dann an S3 gesendet, wenn ich mein Model hier speichere:
%Vor% Paperclip paperclip/.../uri_adapter.rb
Methode wird aufgerufen: ( save
)
Und paperclip/.../attachment.rb
schiebt dann die lokale Datei auf S3 ( flush_writes
)
Deshalb beschränke ich meine ursprüngliche Frage auf diese zwei:
1) So brechen Sie den Aufruf von paperclip/.../s3.rb
ab, wenn dieser bereits aktiv ist (Datei wird auf meinen Rails-Server heruntergeladen)
2) Wie kann ich den Aufruf von open(@target)
abbrechen, wenn die Datei von meinem Rails-Server auf S3 hochlädt?
Wenn die Datei noch auf Ihren Server hochgeladen wird, bevor die serverseitige Verarbeitung die Datei in S3 verarbeitet, sollten Sie die Verbindung wie bereits zuvor abbrechen. I.e. Wie kann die jQuery AJAX-Anfrage abgebrochen / abgebrochen werden?
Wenn die Datei auf den Server hochgeladen wurde und jetzt zu S3 hochlädt: Da Ruby nicht asyncbasiert ist, müssen Sie die Datei im Wesentlichen hochladen, aber da der Server sie jetzt hochlädt, kann Ihr Client das tun technisch verlassen Sie die Seite. Also: Ich würde eine eindeutige ID zurückgeben, wenn Ihr Server die Datei empfängt, wenn der Benutzer noch auf Abbrechen klickt, dann schießen Sie die ID zurück und lassen Sie Ihren Server abfragen oder cron für die Datei löschen.
Tags und Links jquery ruby-on-rails ajax amazon-s3 paperclip