客户端从服务器

时间:2017-02-14 02:18:58

标签: node.js amazon-web-services reactjs

我有前端反应和后端节点。我正在尝试从服务器向客户端发送已签名的AWS URL。奇怪的是,服务器显示正确的URL地址;它打印:

  

的https://*****.s3.amazonaws.com/abd160218_000.jpg AWSAccessKeyId = XXXX&安培;内容类型=图像%2Fjpeg&安培;过期= 1487035862&安培;签名= g6ti%2FN27Uw9O7ihThSr1G79nAmc%3D&安培; X-AMZ -acl =公共读

并发送回网址:

res.send({signedUrl: data});

但是,在客户端立即收到网址后,网址会显示:

  

HTTPS://******.dynamodb.us-east-1.amazonaws.com/abd1601...487037678&签名= wC6iKrTeaOYHyNW5QPoTE%2FzAZ10%3D&安培; X-AMZ-ACL =公共读

这让我很困惑。我从服务器获取带有axios的URL:

axios.get('/blogs/aws/getSignedAWSUrl', {
                        params: {
                            filename: el.file.name,
                            filetype: el.file.type
                        }
                    })
                    .then(function (result) {
                          //AWS s3 signed url returned from server.
                          var signedUrl = result.data.signedUrl;
                          console.log("Signed URl:", signedUrl);
                          var options = {
                            headers: {
                              'Content-Type': el.file.type,
                            }
                          };
                          axios.put(signedUrl, el.file, options);
                    })

这怎么会真的发生?我会很感激任何提示和想法。

** Update- node.js code

 module.exports.getSignedAWSUrl = function(req, res){
    var {filename, filetype} = req.query;
    AWS.config.update({
        accessKeyId: aws.ACCESS_KEY,
        secretAccessKey: aws.SECRET_KEY,
    });
    var bucket = new AWS.S3();
    var params = {
        Bucket: 'mybucket',
        Key: filename,
        Expires: 60,
        ContentType: filetype,
        ACL: 'public-read',
    };

    bucket.getSignedUrl('putObject', params, function(err, data){
        if(err){
            console.log(err);
            return err;
        }
        else{
            console.log("Aws Signed URL:", data);
            res.send({signedUrl: data});
        }
    });
}

1 个答案:

答案 0 :(得分:1)

我终于想通了......

在我的索引页面中,我将配置我的AWS以从dynamoDB获取数据。然后,当我尝试发布新内容时,AWS配置将没有正确的端点。例如,如果您阅读我的AWS配置以获取签名的aws url,我不会更新端点;我所做的就是插入访问权限和密钥。

我已将其更新为@ getSignedUrl,AWS配置为

AWS.configure.update({
    endpoint: "s3.amazonaws.com",
    accessKeyID: aws.ACCESS_KEY,
    secretAccessKey: aws.SECRET_KEY
});

对那些试图提供帮助的人表示歉意。你们不可能帮助提供我提供的信息,我不认为索引页面会导致问题。我很欣赏这些建议。

感谢。