我正在使用 Fog gem 来生成预签名的 url。我可以成功地做到这一点以获得对文件的读取权限。这就是我所做的:
fog_s3 = Fog::Storage.new({
:provider => 'AWS',
:aws_access_key_id => key,
:aws_secret_access_key => secret
})
object_path = 'foo.wav'
expiry = Date.new(2014,2,1).to_time.to_i
url = fog_s3.directories.new(:key => bucket).files.new(:key => object_path).url(expiry,path_style: true)
但是当我尝试上传文件时这不起作用。有没有办法指定 http 动词,使其成为 PUT 而不是 GET?
编辑我看到了一种方法:put_object_url
这可能会有所帮助。我不知道如何访问它。
谢谢
根据您的建议进行编辑:
它有帮助——它给了我一个 PUT——而不是 GET。但是,我仍然遇到问题。我添加了内容类型:
headers = { "Content-Type" => "audio/wav" }
options = { path_style: true }
object_path = 'foo.wav'
expiry = Date.new(2014,2,1).to_time.to_i
url = fog_s3.put_object_url(bucket,object_path, expiry, headers, options)
但网址中不包含该网址Content-Type
。当从 HTML 中的 Javascript 完成时,我得到Content-Type
了 url,这似乎有效。这是雾的问题吗?还是我的标题不正确?