77

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

});

IIは、アップロードされたファイルをクラウドフロント経由でダウンロードできるようにする必要があります。私が正しく想定している場合は、ファイルにアクセス許可を設定する必要があります。だから2つの質問:

1)アップロードされたファイル\フォルダの権限を設定/変更するにはどうすればよいですか?

2)AWS SDKfornode.jsを使用してフォルダーをパブリックにする方法。

4

3 に答える 3

135

見つかりました http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL

putObjectまたはにオプションを追加する必要がありますupload

ACL:'public-read'
于 2013-01-17T10:12:39.303 に答える
34

以下はお守りのように機能します。(paramsの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 "を適切なポリシーに含める必要があります。そうしないと、アクセス拒否エラーが発生します。

于 2019-12-26T08:51:18.620 に答える
22

これは、ローカルファイル(test-file.gif)をS3バケットにアップロードし、誰もがダウンロードできる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);
    }
});
于 2018-10-24T22:43:01.760 に答える