使用Fog with Ruby生成预签名URL以在Amazon S3中输入文件

 郭恭彦_522 发布于 2023-01-30 12:57

我正在使用Fog gem生成预签名网址.我可以成功完成此操作以获得对该文件的读取权限.这是我做的:

    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了网址,这似乎有效.这是雾的问题吗?或者我的标题不正确?

1 个回答
  • 我认为put_object_url确实是你想要的.如果你按照url方法回到它定义的位置,你可以看到它使用类似于get_object_url的类似方法(https://github.com/fog/fog/blob/dc7c5e285a1a252031d3d1570cbf2289f7137ed0/lib/fog/aws/models /storage/files.rb#L83).您应该可以执行类似操作,并且可以通过从上面已创建的fog_s3对象调用此方法来执行此操作.它最终应该看起来像这样:

    headers = {}
    options = { path_style: true }
    url = fog_s3.put_object_url(bucket, object_path, expires, headers, options)
    

    请注意,与get_object_url不同的是,在那里有一个额外的标题选项snuck(你可以使用它来设置类似我认为的设置Content-Type).

    希望能为您排序,但如果您有其他问题,请告诉我.谢谢!

    附录

    嗯,似乎可能存在与此相关的错误(我现在想知道这部分代码已被执行了多少).我认为你应该能够解决它(但我不确定).我怀疑你只能将选项中的值复制为查询参数.你能尝试这样的吗?

    headers = query = { 'Content-Type' => 'audio/wav' }
    options = { path_style: true, query: query }
    url = fog_s3.put_object_url(bucket, object_path, expires, headers, options)
    

    希望为你填补空白(如果是这样的话,我们可以考虑更多关于如果有意义的话,在雾中修复这种行为).谢谢!

    2023-01-30 13:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有