Javascript AWS S3 getSignedUrl()返回过期的SignedUrl

Javascript AWS S3 getSignedUrl()返回过期的SignedUrl,javascript,node.js,amazon-s3,amazon-ec2,mean-stack,Javascript,Node.js,Amazon S3,Amazon Ec2,Mean Stack,可以在localhost上正常工作,但不能在服务器上正常工作。返回的所有URL都已过期 <Error> <Code>AccessDenied</Code> <Message>Request has expired</Message> <Expires>2016-04-26T09:44:22Z</Expires><ServerTime>2016-04-26T11:34:36Z</ServerTim

可以在
localhost
上正常工作,但不能在服务器上正常工作。返回的所有URL都已过期

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<Expires>2016-04-26T09:44:22Z</Expires><ServerTime>2016-04-26T11:34:36Z</ServerTime><RequestId>33AF4E321F37ADA6</RequestId><HostId>+AXA3itXG9aKlt+EQkYxTHJCsxkEkymj+o2COPYo4+v26Vaxx17j/agh+hCq5NoHNzvJp2GI8Y=</HostId>
</Error>
localhost
上,为同一对象生成的URL在
expires
参数中不同,但在服务器上不同。为服务器上的同一对象返回相同的URL(
expires
param每次都相同)

服务器是AmazonEC2。凭据保存在本地主机和服务器上的
/.aws/Credentials
文件中

型号代码

在S3上编辑CORS配置


*
得到
3000
授权
。。。
//这里您需要提供签名URL过期时间作为第三个参数
var params={Bucket:'myBucket',Key:Key,Expires:};
s3.getSignedUrl('getObject',参数,函数(err,url){
...

文档说它将默认为15分钟的有效期,因此结果很奇怪。您是否尝试传递
Expires
值?请参阅:我传递了
Expires
值。结果相同。您能否从结果URL提取过期时间以检查其值?(以UTC为单位)文件刚刚上载。浏览器中URL的结果。
访问被拒绝
请求已过期2016-05-09T09:27:53Z2016-05-09T09:28:58Z35CA4C50C6F689E3/OswGs5Ixdpx5+NGNYBLWGNM1PWGQM4MHCFSNHGLWEDLDG1I+FVCOFGEVVTT1RIIK870M=
实际签名的URL如何?您能在发送到S3的URL中看到过期时间吗?它不起作用。请原谅我看到了关于这个问题的评论。我不知怎么把它修好了。忘记贴答案了,现在记不起来了。
var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.download = function (req, res) {

    var fileName = req.params.name;

    var key = req.user._id + '/' + fileName;

    var params = { Bucket: 'myBucket', Key: key };

    s3.getSignedUrl('getObject', params, function (err, url) {

        if (err) {
            console.log('Getting Signed URL', err);
            res.send(err);
        } else {
            console.log('Getting Signed URL', url);
            res.send(url);            
        }
    });
};
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
...
// here you need to provide signed URL expiration time as the 3rd parameter
var params = { Bucket: 'myBucket', Key: key , Expires: <expire time>};

s3.getSignedUrl('getObject', params, function (err, url) {
...