【发布时间】:2015-12-19 17:50:44
【问题描述】:
我搜索了 Stack Overflow 和互联网,但没有找到答案:
- 我有一个运行 lighttpd 的 EC2 实例,该实例代理到在 Thin 上运行的 Ruby Sinatra 应用程序。
- 我在 S3 上有一个存储桶,我正尝试通过 Sinatra 应用程序上传到该存储桶,该文件位于我的本地计算机上,并且我正在使用在 EC2 上运行的 Sinatra 应用程序将文件传输到我的 S3 存储桶。李>
- 我按照 Amazon 的指示在 .aws/credentials 文件中设置了我的凭据。
每次我尝试上传文件时,无论是通过 Sinatra 应用程序还是尝试通过 REPL 从 EC2 实例上传本地文件,我都会收到以下错误消息:
Aws::S3::Errors::InvalidAccessKeyId The AWS Access Key Id you provided does not exist in our records.
我设置了一个 CORS 配置:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
</CORSRule>
</CORSConfiguration>
这是我的 Ruby 代码:
helpers do
def upload(filename, file, credentials)
bucket = 'BUCKET_NAME'
region = 'us-west-2'
s3 = Aws::S3::Resource.new(region: region, credentials: credentials)
obj = s3.bucket(bucket).object(filename)
obj.upload_file(file)
end
end
get '/' do
erb :index
end
get '/upload' do
erb :upload
end
post '/upload' do
file = params[:file][:tempfile]
filename = params[:file][:filename]
credentials = Aws::SharedCredentials.new
upload(filename, file, credentials)
redirect '/success'
end
任何帮助将不胜感激!
【问题讨论】:
标签: ruby amazon-web-services amazon-s3 amazon-ec2 sinatra