使用Javascript AWS SDK生成预签名的S3 URL

使用Javascript AWS SDK生成预签名的S3 URL,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我试图允许从预先签名的URL访问资产,但我不确定如何做到这一点。从中可以看出,我需要以下内容: Authorization=“AWS”+”“+AWSAccessKeyId+”:“+签名; 签名=Base64(HMAC-SHA1(您的secretAccessKeyID,UTF-8-Encoding-Of(StringToSign)); StringToSign=HTTP动词+“\n”+ Content-MD5+“\n”+ 内容类型+“\n”+ 日期+“\n”+ 标准化的达姆扎德人+ 规范化资源;

我试图允许从预先签名的URL访问资产,但我不确定如何做到这一点。从中可以看出,我需要以下内容:

Authorization=“AWS”+”“+AWSAccessKeyId+”:“+签名;
签名=Base64(HMAC-SHA1(您的secretAccessKeyID,UTF-8-Encoding-Of(StringToSign));
StringToSign=HTTP动词+“\n”+
Content-MD5+“\n”+
内容类型+“\n”+
日期+“\n”+
标准化的达姆扎德人+
规范化资源;
CanonicalizedResource=[“/”+存储桶]+
+
[子资源,如果存在。例如“acl”、“位置”、“日志记录”或“torrent”];
规范化DAMZHEADERS=

我知道如何找到
AWSAccessKeyId
YourSecretAccessKeyID
,但如何使用
HMAC-SHA1
对其进行编码以形成最终签名

我能够生成一个预签名的URL,用于获取文件,如下所示:


此伪代码与使用Javascript SDK生成签名URL无关。这就是你想要做的吗?是的,我想这就是你生成它的方式。看起来你可以这样生成它:
s3.getSignedUrl('getObject',params,function(err,url){console.log(“url是”,url);})但这是为了下载文件,我只需要能够在浏览器中显示它,如果您使用正确的内容类型将其上载到S3,该浏览器也将用于显示文件。在S3控制台中,在对象的元数据中检查这一点。我将寻找什么?我说的是“内容/类型应用程序/八位字节流”,就是这样
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;

Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) );

StringToSign = HTTP-Verb + "\n" +
  Content-MD5 + "\n" +
  Content-Type + "\n" +
  Date + "\n" +
  CanonicalizedAmzHeaders +
  CanonicalizedResource;

CanonicalizedResource = [ "/" + Bucket ] +
  <HTTP-Request-URI, from the protocol name up to the query string> +
  [ subresource, if present. For example "?acl", "?location", "?logging", or "?torrent"];

CanonicalizedAmzHeaders = <described below>
declare var AWS:any;

AWS.config.accessKeyId = "key_goes_here";
AWS.config.secretAccessKey = "secret_key_goes_here";
AWS.config.region = "region_goes_here";

params = {
    Bucket: 'bucket_name_goes_here',
    Key:  'path_to_file_goes_here'
}

s3.getSignedUrl('getObject', params, function (err, url) { 
    // Do some sort of processing with url
});