2016-12-07 3 views
0

Ich bin neu in RoR.Rails download Objekte aus Amazon Eimer s3 aws-sdk

Ich erstelle eine kleine App, die mp3-Objekte aus einem s3-Bucket hochlädt, löscht und herunterlädt. (mit AWS-SDK Gem).

Ich kann nicht den richtigen Download-Controller erstellen. Meine App lädt eine Textdatei namens download mit der Objektreferenz von s3 (Aws :: S3 :: Object: 0x007feb59782368) herunter.

Alle Hilfe wird geschätzt!

Dies ist mein Code:

Controller>

def download 
    bucket = S3.bucket(S3_BUCKET.name) 
    obj = bucket.object(params[:song]) 
    byebug 
    send_data obj 
    end 

Ansicht>

<%= link_to "download", "songs/download/?song=" + song.name %> 

Und die Antwort von byebug:

(byebug) send_data obj 
    Rendering text template 
    Rendered text template (0.0ms) 
Sent data (2.2ms) 
"#<Aws::S3::Object:0x007fc3b1323c60>" 
(byebug) 
+0

haben Sie versucht, das Objekt auszulesen? https://aws.amazon.com/blogs/developer/downloading-objects-from-amazon-s3-using-the-aws-sdk-for-ruby/ – engineersmnky

+0

Ich habe diesen Link unzählige Male heute Morgen überprüft und ich kann Lass meinen Controller nicht arbeiten ... .read funktioniert nicht. – catch22

+0

haben Sie versucht, das Objekt in eine temporäre Datei zu schreiben und dann send_file zu verwenden? Ich habe festgestellt, dass dies sehr effektiv ist. und was meinst du liest nicht funktioniert? – engineersmnky

Antwort

0

Versuchen send_file instea mit d von send_data

0

Ich würde in Betracht ziehen, ein HTTP 302 an die S3-URL zu senden und den Client das Objekt direkt von S3 herunterladen zu lassen. Wenn Ihr App-Server-Proxy die Antwort gibt, bedeutet dies, dass Ihre Rails-App-Prozesse gebunden werden, während sie das Objekt von s3 puffern und es dann über die Pipe senden müssen. Wenn die Sicherheit (und nicht die öffentlichen Objekte der s3-Objekte verfügbar machen wollen) ein Problem darstellt, dann behalte sie privat und erzeuge eine signierte URL für die Objekte mit einem kurzen Verfallsdatum.

0

Die einfachste Möglichkeit wäre, eine Verknüpfung mit der Quelle der Datei zu erstellen. Wenn sie auf diesen Link klicken, wird sie in einem neuen Antippen geöffnet und automatisch von S3 heruntergeladen.

Die andere Option wäre, mit der Download-Funktionalität zu arbeiten, aber ich habe die Dokumente noch nicht gelesen.