首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何向预认证的亚马逊S3链接添加Content-Disposition

如何向预认证的亚马逊S3链接添加Content-Disposition
EN

Stack Overflow用户
提问于 2011-11-09 17:16:21
回答 2查看 4.1K关注 0票数 2

我将使用此代码创建一个经过身份验证的Amazon Url http://developer.longtailvideo.com/trac/browser/testing/files/s3-generator.php

有没有可能通过添加Content-Disposition头来让Amazon知道文件需要强制下载?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-13 17:54:47

在收集了这个拼图的各个部分之后,我能够创建这个Ruby方法,它使用aws密钥正确地对查询字符串url进行签名。

我的资源如下:

  • RESTObjectGET documentation
  • Signing and Authenticating REST Requests

此外,来自S3的响应也很有帮助,因为当我创建一个带有错误签名的url时,响应显示了AWS S3通过解密我生成的URL而生成的string_to_sign。经过几次迭代,我能够收敛到string_to_sign的正确格式上,然后它就变成了非常标准的东西。

下面是Ruby方法:

代码语言:javascript
运行
复制
##############################################################################
# Create a signed query-string URL that supports setting response headers
##############################################################################
def s3_signed_url(bucket, pathname, verb, content_md5=nil, content_type=nil, response_headers = {})
  expires = Time.now + 5.minutes
  response_headers_canonicalized = response_headers.sort_by{|key, value| key.downcase}.collect{|key, value| "#{key}=#{value}"}.join("&").to_s
  string_to_sign = "#{verb.upcase}\n#{content_md5}\n#{content_type}\n#{expires.to_i}\n/#{bucket}/#{pathname}?#{response_headers_canonicalized}"

    digest = OpenSSL::Digest::Digest.new('sha1')
  hmac = OpenSSL::HMAC.digest(digest, aws_secret_key, string_to_sign)
  signature = Base64.encode64(hmac).chomp
  url = "http://s3.amazonaws.com/#{bucket}/#{pathname}?"
  if response_headers.count > 0
    response_headers.each do |key, value|
      url += "#{key}=#{value}&"
    end
  end
  url += "AWSAccessKeyId=#{aws_access_key}&Expires=#{expires.to_i}&Signature=#{CGI.escape(signature)}";
  return url
end

你可以这样调用这个方法:

代码语言:javascript
运行
复制
file_url_s3 = s3_signed_url(file_bucket, file_path, 'GET', nil, nil, {'response-content-disposition' => 'attachment'})
票数 4
EN

Stack Overflow用户

发布于 2012-09-03 19:46:51

用于PHP和Ruby的AWS SDK的当前版本都有方法参数,允许您在生成签名链接时指定内容部署标头。

PHP:

  • PHP:get_object_url -

response - array - Optional -允许调整特定的响应头。传递一个关联数组,其中每个键都是以下项之一: cache-control、content-disposition、content-encoding、content-language、content-type、expires。这个

S3Object url_for instance method

  • 红宝石

选项哈希::response_content_disposition (字符串)-在返回的URL上执行HTTP GET时设置响应的Content-Disposition标头。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8062684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档