Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services s3用于访问整个文件夹的预签名url_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services s3用于访问整个文件夹的预签名url

Amazon web services s3用于访问整个文件夹的预签名url,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我有一个s3存储桶,其中包含包含不同网站的单独文件夹。我想为访问特定文件夹生成一个预先签名的url,但是我想让url允许访问该文件夹中的所有对象。这可能吗 我正在使用ruby aws sdk gem v2 我现有的代码如下所示 def get_object_url(bucket_name, object_name) res = Aws::S3::Resource::new obj = res.bucket(bucket_name).object(object_name)

我有一个s3存储桶,其中包含包含不同网站的单独文件夹。我想为访问特定文件夹生成一个预先签名的url,但是我想让url允许访问该文件夹中的所有对象。这可能吗

我正在使用ruby aws sdk gem v2

我现有的代码如下所示

  def get_object_url(bucket_name, object_name)
    res = Aws::S3::Resource::new
    obj = res.bucket(bucket_name).object(object_name)
    exp = 1.day
    url = obj.presigned_url(:get, {
                           expires_in: exp,
                           virtual_host: true
                       })
    url
  end

将文件夹名作为对象名传递不起作用。

不,S3并没有真正的文件夹概念。文件夹是使用对象路径的段“创建”的。它们并不独立于对象而存在。

我最近遇到了这个问题,我可以使用cloudfront为签名URL找到一个自定义策略的解决方案

有一些优点和缺点,主要的一点是你不需要为每个对象签名,所以如果你需要共享多个对象,速度会快得多。但这就像aws的交通之外


此外,V2和V4算法中的签名都取决于特定的对象密钥(“路径”),对于任何给定的请求参数集,只能有一个有效签名,因此可能存在通配符(这意味着不止一个潜在有效的签名、对象和“文件夹”)不可能,有什么消息吗?这个限制是否仍然存在?有什么解决办法?@user3211074是的,这个限制仍然存在。它不太可能因S3的设计方式而改变。一个相对简单的解决方法是让你的应用程序接受用户对路径模式的请求,例如,
/downloads/secure/${bucket}/${S3_object_path}
。如果用户获得下载授权,则生成一个签名URL,并在
位置:
标题中返回一个带有签名URL的
302
http重定向。我使用这种方法用S3中的可下载文件改造了一个遗留平台。