AWS S3 JavaScript SDK(v3)常用操作

安装 aws s3 sdk

shell 复制代码
npm install @aws-sdk/client-s3

配置

创建 ~/.aws/credentials 文件,添加以下配置项:

shell 复制代码
[default]
aws_access_key_id=<...>
aws_secret_access_key=<...>
region=<...>

S3 SDK常用桶操作

获取桶列表

typescript 复制代码
import {
    S3Client,
    Bucket,
    paginateListBuckets,
} from "@aws-sdk/client-s3";

async function listBuckets() {
    const client = new S3Client({});

    try {
        const buckets: Bucket[] = [];
        for await (const page of paginateListBuckets({ client }, {})) {
            if (page.Buckets) {
                buckets.push(...page.Buckets);
            }
        }
        console.log("Buckets: ", buckets);
    } catch (error) {
        console.error(error);
    }
}

创建桶

typescript 复制代码
import {
    S3Client,
    Bucket,
    CreateBucketCommand,
    waitUntilBucketExists,
} from "@aws-sdk/client-s3";

async function createBucket(bucket: string) {
    const client = new S3Client({});

    try {
        const { Location } = await client.send(
            new CreateBucketCommand({
                Bucket: bucket,
            })
        );
        await waitUntilBucketExists({ client, maxWaitTime: 1000 }, { Bucket: bucket });
        console.log(`Bucket created with location ${Location}`);
    } catch (error) {
        console.error(error);
    }
}

删除桶

typescript 复制代码
import {
    S3Client,
    Bucket,
    DeleteBucketCommand,
    waitUntilBucketExists,
} from "@aws-sdk/client-s3";

async function deleteBucket(bucket: string) {
    const client = new S3Client({});

    try {
        await client.send(
            new DeleteBucketCommand({
                Bucket: bucket,
            })
        );
        console.log("Bucket was deleted.");
    } catch (error) {
        console.error(error);
    }
}

S3 SDK常用对象操作

获取对象列表

typescript 复制代码
import {
    S3Client,
    Bucket,
    paginateListObjectsV2,
} from "@aws-sdk/client-s3";

async function listObjects(bucket: string) {
    const client = new S3Client({});

    try {
        const objects = [];
        const paginator = paginateListObjectsV2({ client, pageSize: 2 }, { Bucket: bucket });
        for await (const page of paginator) {
            if (page.Contents) {
                objects.push(page.Contents.map((o) => o.Key));
            }
        }
        console.log("Objects: ", objects);
    } catch (error) {
        console.error(error);
    }
}

获取对象

typescript 复制代码
import {
    S3Client,
    Bucket,
    GetObjectCommand,
} from "@aws-sdk/client-s3";

async function getObject(bucket: string, key: string) {
    const client = new S3Client({});

    try {
        const response = await client.send(
            new GetObjectCommand({
                Bucket: bucket,
                Key: key,
            })
        );
        if (response.Body) {
            console.log(await response.Body.transformToString());
        }
    } catch (error) {
        console.error(error);
    }
}

上传对象

typescript 复制代码
import {
    S3Client,
    Bucket,
    PutObjectCommand,
} from "@aws-sdk/client-s3";
import { readFile } from "node:fs/promises";

async function putObject(bucket: string, key: string, filePath: string) {
    const client = new S3Client({});

    try {
        const response = await client.send(
            new PutObjectCommand({
                Bucket: bucket,
                Key: key,
                Body: await readFile(filePath),
            })
        );
        console.log(response);
    } catch (error) {
        console.error(error);
    }
}

删除对象

typescript 复制代码
import {
    S3Client,
    Bucket,
    DeleteObjectCommand,
} from "@aws-sdk/client-s3";

async function deleteObject(bucket: string, key: string) {
    const client = new S3Client({});

    try {
        const response = await client.send(
            new DeleteObjectCommand({
                Bucket: bucket,
                Key: key,
            })
        );
        console.log(response);
    } catch (error) {
        console.error(error);
    }
}
相关推荐
王道长服务器 | 亚马逊云4 天前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws
世间小小鱼4 天前
【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
前端·云计算·aws
TG_yunshuguoji4 天前
亚马逊云代理商:AWS亚马逊云的独特优势与实用价值
服务器·云计算·aws
阿雄不会写代码4 天前
AWS strands agents 当智能体作为独立服务/容器部署时,它们无法共享进程内状态
云计算·aws
无责任此方_修行中4 天前
AWS IoT Core 成本优化实战:从 PoC 到生产的省钱之旅
后端·架构·aws
AWS官方合作商4 天前
涂鸦智能携手亚马逊云科技,以全球基础设施与生成式AI加速万物智联时代到来
人工智能·科技·aws·亚马逊云科技
TG_yunshuguoji5 天前
亚马逊云代理:亚马逊云怎么样进行大规模数据分析与处理?
数据挖掘·数据分析·云计算·aws
Clownseven5 天前
AWS EC2部署WordPress教程:从零到一搭建个人博客 (2025最新)
云计算·aws
Clownseven5 天前
阿里云OSS vs 腾讯云COS vs AWS S3:对象存储价格与性能深度对比
阿里云·腾讯云·aws
练习两年半的工程师7 天前
AWS TechFest 2025: 风险模型的转变、流程设计的转型、生成式 AI 从实验走向实施的三大关键要素、评估生成式 AI 用例的适配度
人工智能·科技·金融·aws