2016-10-19 4 views
0

私はRuby用aws-sdk v2を使用しています。私はそうのようなバケットを作成しました:aws-sdk for Ruby v2:S3バケットのオブジェクトをPUTした後に成功ステータスを確認してください

client = Aws::S3::Client.new(region: 'us-west-2') 
s3 = Aws::S3::Resource.new(client: client) 
S3_BUCKET = s3.bucket(ENV['AWS_BUCKET']) 

私は私のバケットにオブジェクトを書き込むことが可能な唯一の方法はput.は、しかし、私はこの方法で利用可能な「success_action_status」を参照していないであることを発見しました。私はElastic Beanstalkに自分のアプリを配備しました。ローカルでは、私はこのバケツに書き込むことができますが、自分のebアプリケーションに書き込もうとすると、うまく動作せず、何が起きているのか把握しようとしています。私のPUTリクエストが間違っている場所を特定するのに役立つ情報があれば助かります。ここで

は、私の方法は、今のようになります:

def create 
    username = params[:user][:user_alias] 
    key = "uploads/#{username}" 
    obj = S3_BUCKET.object(key) 

    obj.put({ 
     acl: 'public-read', 
     body: params[:user][:image_uri], 
    }) 

    @user = User.new(user_params) 
    if @user.save 
     render json: @user, status: :created, location: @user 
    else 
     render json: @user.errors, status: :unprocessable_entity 
    end 
    end 

ここで私はPUTメソッドのために言及していますドキュメントです:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#put-instance_method

答えて

0

イメージファイルをINGのputているようには思えません。 、唯一のuri。ドキュメントはput方法のbodyオプションについてはこれを言う:

body: source_file, # file/IO object, or string data 

あなたが実際に画像をアップロードするために、画像ファイルを読み込むか、開く必要があります:

obj.put({ 
    acl: 'public-read', 
    body: File.open(params[:user][:image_uri], ?r), 
}) 

次に、あなたが成功を確認することができますステータスはexists?

+0

ありがとう、ありがとう!イメージはbyteaデータ型として設定されます。アップロードするにはまだ読み込み/開く必要がありますか? – swellactually

+0

また、なぜ何かがローカルにS3に投稿されるのは混乱していますが、配備されたアプリには何も表示されません。今私は文字列を渡してテストしていますが、ローカルに投稿するとS3バケットに文字列が表示されますが、ebで全く同じ投稿を実行すると何も表示されません。デプロイされたバージョンではなぜ動作しませんか? – swellactually

+0

サーバにAWSの信用状またはS3に書き込めるポリシーがありますか? – DiegoSalazar

関連する問題