web-dev-qa-db-ja.com

AWS SDKを使用してバケット内の特定のフォルダーにファイルをアップロードする

ノードの開発者ツールキットを使用して画像をAWS S3にアップロードしています:

const aws = require('aws-sdk');

const s3Bucket = process.env.S3_BUCKET;
    const s3 = new aws.S3({
      signatureVersion: 'v4',
      region: process.env.S3_REGION,
      accessKeyId: process.env.S3_ACCESS_KEY_ID,
      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
    });

    const s3Params = {
      Bucket: s3Bucket,
      Key: filename,
      Expires: 60,
      ContentType: filetype,
      ACL: 'public-read',
    };

これは機能しますが、バケット内の特定のフォルダに画像をアップロードするにはどうすればよいですか?

10
Evanss

Amazon S3は、実際にはフォルダーを使用しないフラットストレージシステムです。

むしろ、キー(ファイル名)にはオブジェクトのフルパスが含まれます。例:

folder1/folder2/foo.txt

Amazon S3管理コンソールはフォルダー内のバケットの内容を表示しますが、これらは人為的に理解しやすくするための人工的な構成(と呼ばれる一般的なプレフィックス)です。

そのため、特定のフォルダにアップロードする場合は、キーにフルパスを含めるを指定するだけで機能します(より正確には、のように機能します! )。

楽しい事実:存在しないフォルダにコピーすることができ、フォルダは「作成」されます。次に、オブジェクトを削除すると、フォルダは実際には存在しなかったため、「削除」されます。

10
John Rotenstein

実際、S3にはフォルダオブジェクトがなく、キー名もすべて含まれています。 「folder/myfile.txt」などのキーの名前に「いいね」フォルダを入れると、それがS3ブラウザのフォルダとして表示されます。

同様の質問: https://serverfault.com/questions/435827/what-is-the-difference-between-buckets-and-folders-in-Amazon-s

0
Reza Mousavi

AWS S3にはフォルダー構造がありません。 S3バケット内のフォルダーのように表示されますが、それはキー構造です。自分の作品の1つでコピーコマンドを使用しました。 S3バケットフォルダにファイルをコピーしています。

aws s3 cp myapp.Zip s3:// $ S3_BUCKET_NAME/FolderName/FileName

aws s3 cp myapp.Zip s3:// $ S3_BUCKET_NAME/MyFolder/MyFileName

AWS S3バケットにフォルダーを作成する必要はありません。特定のフォルダーが存在しない場合は作成します

上記のコードは、フォルダー内にmyapp.Zipファイルをコピーしています-ファイル名がMyFileNameのS3バケットのMyFolder

0
Gaurav Upadhyay