2016-12-07 21 views
0

私はRoRを初めて使いました。Railsはamazonバケットs3 aws-sdkからオブジェクトをダウンロードします

私はs3バケットからmp3オブジェクトをアップロード、削除、ダウンロードする小さなアプリを作成しています。 (aws-sdk gemを使用して)。

右のダウンロードコントローラを作成できません。私のアプリは、s3からObjectリファレンスでダウンロードと呼ばれるテキストファイルをダウンロードしています(Aws :: S3 :: Object:0x007feb59782368)。

すべてのサポートをいただければ幸いです!

これは私のコードです:

コントローラ>

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

ビュー>

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

そしてbyebugからの応答:

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

あなたはオブジェクトを読み込もうとしましたか? https://aws.amazon.com/blogs/developer/downloading-objects-from-amazon-s3-using-the-aws-sdk-for-ruby/ – engineersmnky

+0

私は今朝このリンクを何度もチェックしました。私のコントローラを動作させない... .readは動作しません。 – catch22

+0

一時ファイルにオブジェクトを書き込んだ後、send_fileを使用しようとしましたか?私はそれが非常に効果的であることを発見しました。あなたは読書がうまくいかないということは何を意味しますか? – engineersmnky

答えて

0

send_file insteaを使用してみてくださいd send_data

0

S3 URLにHTTP 302を送信し、クライアントがS3から直接オブジェクトをダウンロードすることを検討したいと思います。あなたのアプリ・サーバー・プロキシに応答を持たせることによって、あなたのレール・アプリ・プロセスは、s3からオブジェクトをバッファしてから、パイプを下に送らなければならないことになります。セキュリティ(s3オブジェクトを公開することを望まない)が懸念される場合は、それらを非公開にして、短期有効期限を持つオブジェクトへの署名付きURLを生成します。

0

最も簡単なオプションは、ファイルのソースとのリンクを作成することです。そのリンクをクリックすると、新しいタップで開き、S3から自動的にダウンロードされます。

他のオプションは、ダウンロード機能を使用することですが、私はまだドキュメントを読んでいませんでした。

関連する問題