Wie kann die Datei abgebrochen werden, die auf Amazon S3 hochgeladen wird?

8

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)

%Vor%

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 )

%Vor%

Und paperclip/.../attachment.rb schiebt dann die lokale Datei auf S3 ( flush_writes )

%Vor%

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?

    
yaru 27.03.2014, 13:14
quelle

1 Antwort

2

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.

    
MKN Web Solutions 04.04.2014, 13:49
quelle