ノードの開発者ツールキットを使用して画像を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',
};
これは機能しますが、バケット内の特定のフォルダに画像をアップロードするにはどうすればよいですか?
Amazon S3は、実際にはフォルダーを使用しないフラットストレージシステムです。
むしろ、キー(ファイル名)にはオブジェクトのフルパスが含まれます。例:
folder1/folder2/foo.txt
Amazon S3管理コンソールはフォルダー内のバケットの内容を表示しますが、これらは人為的に理解しやすくするための人工的な構成(と呼ばれる一般的なプレフィックス)です。
そのため、特定のフォルダにアップロードする場合は、キーにフルパスを含めるを指定するだけで機能します(より正確には、のように機能します! )。
楽しい事実:存在しないフォルダにコピーすることができ、フォルダは「作成」されます。次に、オブジェクトを削除すると、フォルダは実際には存在しなかったため、「削除」されます。
実際、S3にはフォルダオブジェクトがなく、キー名もすべて含まれています。 「folder/myfile.txt」などのキーの名前に「いいね」フォルダを入れると、それがS3ブラウザのフォルダとして表示されます。
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