2

我正在使用 Skipper.js 将我的图像上传到 Amazon Web Service S3 但无法使用Skipper.js为上传的文件创建公共URL。我不想使用我想上传到S3并能够创建可公开访问的 url 来下载文件的Skipper-Disk 。我的代码在下面,这就是我所做的一切

 imageUpload: function(req, res) {
    //console.log(req);
    req.file('avatar').upload({
        adapter: skipper,
        key: 'key',
        secret: 'secret',
        bucket: 'bucketName'
    }, function(err, fileUploaded){
        if (err) {
            console.log(err);
            return res.negotiate(err);
        }

        if (fileUploaded.length === 0) {
            return res.badRequest('No files uploaded');
        }

        var imageUrl = fileUploaded[0].extra.Location;
        var imageKy = fileUploaded[0].extra.Key;
        ImageUpload.create({urlLink: imageUrl, imageKey: imageKy}).then(function(urlAdded){
            if (urlAdded) {
                //return res.negotiate(err);
                //The linkAdded is the link the s3 provides to the image E.g https://bucket.s3.amazonaws.com/filename
                return res.json({linkAdded: urlAdded});
            }
        })
        .catch(function (err){
            return res.badRequest(err);
        });
    });
}
4

1 回答 1

2

假设在您拥有的文件顶部,您似乎正确地完成了所有上传代码:

var skipper = require('skipper-s3')

实际修复与 S3 配置有关。在 AWS S3 控制台中,选择您的存储桶后,您需要选择属性 -> 权限 -> 编辑存储桶策略。

添加此代码以使您的存储桶具有公共 GET 请求,但将 Resource 参数中的“bucketName”替换为您的存储桶名称:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucketName/*"
        }
    ]
}
于 2015-08-02T11:14:46.723 回答