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

如何在Node.js中通过aws-sdk的getObject访问S3桶sp目录下的文件

Node.js调用aws-sdk访问S3指定子目录文件的实现方法

S3是对象存储服务,不存在真实的文件系统目录结构,你提到的/sp子目录本质是对象键的固定前缀,调用getObject时只需要将目标文件名拼在sp/前缀后作为Key参数传入即可。

1. 前置准备

  • 安装对应版本的aws-sdk:
    • 如果你使用AWS SDK v2:执行命令 npm install aws-sdk
    • 如果你使用AWS SDK v3(新版本推荐):执行命令 npm install @aws-sdk/client-s3
  • 提前配置好AWS访问凭证,确保凭证拥有对应S3存储桶的s3:GetObject权限,不要在代码中硬编码明文凭证。

2. AWS SDK v2 示例代码

const AWS = require('aws-sdk');
// 替换为你存储桶实际所属的AWS区域
AWS.config.update({ region: 'us-east-1' });

const s3 = new AWS.S3();
const bucketName = 'aruba-get-rds-backups.getaws.arubanetworks.com';
// 替换为你要访问的sp目录下的实际文件名
const targetFileName = 'backup_20240101.sql';

const params = {
  Bucket: bucketName,
  Key: `sp/${targetFileName}`
};

// 回调写法
s3.getObject(params, (err, data) => {
  if (err) {
    console.error('获取文件失败: ', err);
    throw err;
  }
  // data.Body为文件内容的Buffer对象,可按需处理
  console.log('文件大小:', data.ContentLength);
  // 转字符串示例:const content = data.Body.toString()
  // 写入本地文件示例:require('fs').writeFileSync('./local_backup.sql', data.Body)
});

// Promise写法可选:
// s3.getObject(params).promise().then(data => {}).catch(err => {})

3. AWS SDK v3 示例代码

const { S3Client, GetObjectCommand } = require('@aws-sdk/client-s3');
// 替换为你存储桶实际所属的AWS区域
const s3Client = new S3Client({ region: 'us-east-1' });

const bucketName = 'aruba-get-rds-backups.getaws.arubanetworks.com';
// 替换为你要访问的sp目录下的实际文件名
const targetFileName = 'backup_20240101.sql';

const getObjectParams = {
  Bucket: bucketName,
  Key: `sp/${targetFileName}`
};

const getFile = async () => {
  try {
    const command = new GetObjectCommand(getObjectParams);
    const response = await s3Client.send(command);
    // 文本类文件转字符串示例:const content = await response.Body.transformToString()
    // 写入本地文件示例:await require('fs/promises').writeFile('./local_backup.sql', response.Body)
    console.log('文件获取成功,大小:', response.ContentLength);
  } catch (err) {
    console.error('获取文件失败:', err);
    throw err;
  }
};

getFile();

补充说明

如果你需要先遍历sp目录下的所有文件再批量获取,可以调用listObjectsV2方法,将Prefix参数设为sp/即可拿到该前缀下的所有对象列表,再逐个调用getObject处理即可。

内容的提问来源于stack exchange,提问作者Chiranjeevi Chennupati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:02