繁体   English   中英

创建Amazon S3预签名URL以从Ruby on Rails进行公共访问

[英]Creating Amazon S3 presigned url for public access from Ruby on Rails

我有与此问题完全相同的问题,但是当我在Postman中测试时,我的代码生成以下错误:

AccessDenied请求中存在未签名的标头。

在此处输入图片说明

这是创建URL的ruby代码:

require 'aws-sdk'
class Api::AmazonController < ApiController
  before_action :set_credentials

  def presign
    if params[:filename] # && params[:type]
      s3 = Aws::S3::Resource.new(region:'eu-west-2')
      bucket = Rails.application.secrets.s3_bucket_name.to_s
      obj = s3.bucket(bucket).object(params[:filename])
      url = obj.presigned_url(:put, acl:'public-read') #, content_type: params[:type], expires: 10*60) 
      render json: url
    else
      render json: { error: 'Invalid params' }
    end
  end

  private

    def set_credentials
      Aws.config[:credentials] = Aws::Credentials.new(Rails.application.secrets.aws_access_key_id, Rails.application.secrets.aws_secret_access_key)
      # Aws.config.update({region: 'eu-west-2'})
    end
end

如果我从红宝石代码中删除了x-amz-acl标头:

url = obj.presigned_url(:put)

然后就可以了,我可以放一个文件。 那我想念什么呢?

解决方案是不要在邮递员中添加标题。 将其保留在ruby代码中并从Postman中删除“ x-amz-acl”参数即可解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM