Js SDK 上传文件和文件夹权限

我正在使用 aws-sdk 包将文件上传到 S3:

fs.readFile(sourceFile, function (err, data) {
if (err) { throw err; }


s3.client.putObject({
Bucket: bucketName,
Key: 'Folder/image.jpg',
Body: data
}, function (res) {
console.log('Successfully uploaded file.');
})


});

我需要使上传的文件可以通过 Cloudfront 下载,如果我假设正确,我需要设置文件的权限: 每个人都打开/下载,Folder2应该公开(通过菜单 Make Public)。有两个问题:

1)如何设定上载档案资料夹的修改权限?

2)如何使用 AWS SDK for node.js 公开文件夹。

56929 次浏览

找到了 Http://docs.aws.amazon.com/amazons3/latest/dev/acloverview.html#cannedacl

需要在 putObjectupload中添加选项:

ACL:'public-read'

下面是一个工作代码片段,它将一个本地文件(test-file.gif)上传到 S3 bucket,并打印出一个 URL 供所有人下载。

const fs = require('fs');
const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-west-1' });


// Fill in your bucket name and local file name:
const BUCKET_NAME = 'test-bucket-name-goes-here'
const FILE_NAME_LOCAL = './test-file.gif'
const FILE_NAME_S3 = 'this-will-be-the-file-name-on-s3.gif'
const FILE_PERMISSION = 'public-read'


// Create S3 service object
s3 = new AWS.S3({ apiVersion: '2006-03-01' });


// Get file stream
const fileStream = fs.createReadStream(FILE_NAME_LOCAL);


// Upload the file to a specified bucket
const uploadParams = {
Bucket: BUCKET_NAME,
Key: FILE_NAME_S3,
Body: fileStream,
ACL: FILE_PERMISSION
};


s3.upload(uploadParams, function (err, data) {
if (err) {
console.log("Error", err);
} if (data) {
console.log("Upload Success", data.Location);
}
});

下面的方法非常有效。(请注意参数中的 ACL 键)

const params = {
Bucket: bucketName + path,
Key: key,
Body: buffer,
ContentEncoding: 'base64',
ContentType: 'image/jpeg',
ACL:'public-read'
};
await s3.putObject(params).promise();

注意 : IAM 权限“ S3: PutObjectACL”必须包含在适当的策略中,否则将得到 访问被拒绝错误。