简体   繁体   中英

AWS S3 node.js SDK uploaded file and folder permissions

I'm uploading file to S3 using aws-sdk package:

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.');
        })

});

II need to make uploaded file to be downloadable via cloudfront, if I asume right, I need to set permissions on file: Everyone Open/Download, Folder2 should be made public (via menu Make Public). So 2 questions:

1) How to set\\modify permissions on uploaded file\\folder?

2) How make Folder public using AWS SDK for node.js.

Found it http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL

need to add option in putObject or upload :

ACL:'public-read'

The following works like a charm. ( Note the ACL key in params )

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

Note : IAM permission " s3:PutObjectACL " must be included in the appropriate policy otherwise you will get Access Denied errors.

Here is a working code snippet that uploads a local file (test-file.gif) to S3 bucket and prints out a URL for everyone to download.

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);

// Call S3 to retrieve upload file to 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);
    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM