You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS S3存储桶策略实现文件公开可读?求Node.js代码示例

配置AWS S3存储桶让上传文件公开可读 + Node.js代码示例

一、存储桶策略配置步骤

  1. 登录AWS控制台,打开S3服务,选中目标存储桶。
  2. 切换到「权限」标签页,找到「存储桶策略」选项并点击「编辑」。
  3. 粘贴以下策略代码,将your-bucket-name替换为你的存储桶名称:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
  • 简单说明:这个策略允许所有用户执行s3:GetObject(读取文件)操作,覆盖存储桶内所有对象。
  1. 检查并关闭存储桶及账户级别的「阻止公共访问」设置,否则策略无法生效。

二、Node.js代码示例

前置准备

  1. 安装AWS SDK v3(推荐新版本):
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage
  1. 配置AWS凭证:可以通过环境变量设置,或在本地创建~/.aws/credentials(Windows路径为C:\Users\你的用户名\.aws\credentials),内容格式如下:
[default]
aws_access_key_id = 你的Access Key ID
aws_secret_access_key = 你的Secret Access Key

上传单个文件并设置公开可读

const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
const fs = require("fs");

// 初始化S3客户端
const s3Client = new S3Client({
  region: "你的存储桶所在区域,比如us-east-1"
});

async function uploadPublicFile() {
  const params = {
    Bucket: "your-bucket-name", // 替换为你的存储桶名
    Key: "demo/public-image.png", // 文件在S3中的存储路径+名称
    Body: fs.createReadStream("./local-image.png"), // 本地文件路径
    ACL: "public-read" // 核心参数:设置文件公开可读
  };

  try {
    await s3Client.send(new PutObjectCommand(params));
    // 生成公开访问链接
    const publicUrl = `https://${params.Bucket}.s3.${s3Client.config.region}.amazonaws.com/${params.Key}`;
    console.log("文件上传成功,公开链接:", publicUrl);
  } catch (err) {
    console.error("上传失败:", err);
  }
}

// 执行上传
uploadPublicFile();

可选:批量修改已有文件为公开可读

如果需要将存储桶内已有的文件批量设置为公开可读,可使用以下代码:

const { S3Client, ListObjectsV2Command, PutObjectAclCommand } = require("@aws-sdk/client-s3");

const s3Client = new S3Client({ region: "你的存储桶区域" });
const bucketName = "your-bucket-name";

async function batchSetPublicAcl() {
  let nextToken;

  do {
    // 分页获取存储桶内文件列表
    const listRes = await s3Client.send(new ListObjectsV2Command({
      Bucket: bucketName,
      ContinuationToken: nextToken
    }));

    // 遍历文件设置ACL
    for (const item of listRes.Contents) {
      await s3Client.send(new PutObjectAclCommand({
        Bucket: bucketName,
        Key: item.Key,
        ACL: "public-read"
      }));
      console.log(`已设置 ${item.Key} 为公开可读`);
    }

    nextToken = listRes.NextContinuationToken;
  } while (nextToken);

  console.log("所有文件处理完成");
}

batchSetPublicAcl();

注意事项

  • 公开存储桶或文件意味着所有人都能访问,请勿上传敏感数据。
  • 确保你的AWS凭证拥有足够权限(如s3:PutObject、s3:PutObjectAcl、s3:ListBucket等)。

内容的提问来源于stack exchange,提问作者Viranga Bogahalanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:01:18