S3Filesystem
将文件存储在 Amazon S3 或兼容 S3 的存储服务中,例如 Cloudflare R2、MinIO、DigitalOcean Spaces 和 Tigris。有关接口的详细信息,请参阅 WorkspaceFilesystem 接口。
安装安装的直接链接
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/s3
pnpm add @mastra/s3
yarn add @mastra/s3
bun add @mastra/s3
使用方法使用方法的直接链接
将 S3Filesystem 添加到 Workspace 并分配给 Agent:
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { S3Filesystem } from '@mastra/s3'
const workspace = new Workspace({
filesystem: new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
})
const agent = new Agent({
id: 'file-agent',
name: 'file-agent',
model: 'anthropic/claude-opus-4-7',
workspace,
})
AWS 凭证 Provider 链AWS 凭证 Provider 链的直接链接
未提供凭证时,S3Filesystem 使用 AWS SDK 的默认凭证 Provider 链。该链会自动从环境变量、~/.aws 配置文件、ECS 容器凭证、EC2 实例配置文件及其他标准来源中发现凭证。
import { S3Filesystem } from '@mastra/s3'
// SDK discovers credentials from the environment automatically
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
})
传入凭证 Provider 函数可自动刷新凭证。这适用于部署到 ECS、Lambda 的情况,也适用于使用 SSO/AssumeRole 时临时凭证会过期并需要刷新的情况。
直接调用 fromNodeProviderChain() 时,请安装 AWS SDK 凭证 Provider 包:
- npm
- pnpm
- Yarn
- Bun
npm install @aws-sdk/credential-providers
pnpm add @aws-sdk/credential-providers
yarn add @aws-sdk/credential-providers
bun add @aws-sdk/credential-providers
import { S3Filesystem } from '@mastra/s3'
import { fromNodeProviderChain } from '@aws-sdk/credential-providers'
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
credentials: fromNodeProviderChain(),
})
Provider 函数仅适用于 S3Filesystem API 调用。将文件系统挂载到 E2B Sandbox 时,挂载配置仅支持静态的 accessKeyId、secretAccessKey 和 sessionToken 值,因此凭证刷新必须在挂载外部处理。
Cloudflare R2Cloudflare R2的直接链接
import { S3Filesystem } from '@mastra/s3'
const filesystem = new S3Filesystem({
bucket: 'my-r2-bucket',
region: 'auto',
endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
accessKeyId: process.env.R2_ACCESS_KEY_ID,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
})
MinIOMinIO的直接链接
import { S3Filesystem } from '@mastra/s3'
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
endpoint: 'http://localhost:9000',
accessKeyId: 'minioadmin',
secretAccessKey: 'minioadmin',
})
TigrisTigris的直接链接
import { S3Filesystem } from '@mastra/s3'
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'auto',
endpoint: 'https://t3.storage.dev',
accessKeyId: process.env.TIGRIS_ACCESS_KEY_ID,
secretAccessKey: process.env.TIGRIS_SECRET_ACCESS_KEY,
forcePathStyle: false,
})
Tigris 使用虚拟主机样式寻址,因此必须将 forcePathStyle 设置为 false(提供自定义端点时,默认为 true)。请从 Tigris Dashboard 创建凭证。访问密钥以 tid_ 为前缀,机密以 tsec_ 为前缀。
构造函数参数构造函数参数的直接链接
bucket:
region:
credentials?:
fromNodeProviderChain(),来自 @aws-sdk/credential-providers)。优先级高于 accessKeyId/secretAccessKey/sessionToken。省略所有凭证选项时,使用 SDK 的默认凭证 Provider 链。accessKeyId?:
secretAccessKey 和 credentials 一同省略时,使用 SDK 的默认凭证 Provider 链。secretAccessKey?:
accessKeyId 和 credentials 一同省略时,使用 SDK 的默认凭证 Provider 链。sessionToken?:
accessKeyId/secretAccessKey 一起使用。对于可自动刷新的 SSO、AssumeRole 或容器凭证,请使用 credentials Provider 参数或 SDK 的默认凭证 Provider 链。endpoint?:
forcePathStyle?:
prefix?:
id?:
displayName?:
icon?:
description?:
readOnly?:
属性属性的直接链接
id:
name:
provider:
bucket:
readOnly:
方法方法的直接链接
S3Filesystem 实现了 WorkspaceFilesystem 接口,提供所有标准文件系统方法:
readFile(path, options?)- 读取文件内容writeFile(path, content, options?)- 将内容写入文件appendFile(path, content)- 将内容追加到文件deleteFile(path, options?)- 删除文件copyFile(src, dest, options?)- 复制文件moveFile(src, dest, options?)- 移动文件或重命名mkdir(path, options?)- 创建目录rmdir(path, options?)- 删除目录readdir(path, options?)- 列出目录内容exists(path)- 检查路径是否存在stat(path)- 获取文件或目录元数据
init()init的直接链接
初始化文件系统。验证存储桶访问权限和凭证。
await filesystem.init()
getInfo()getinfo的直接链接
返回有关此文件系统实例的元数据。
const info = filesystem.getInfo()
// { id: '...', name: 'S3Filesystem', provider: 's3', status: 'ready' }
getMountConfig()getmountconfig的直接链接
返回支持挂载此文件系统类型的 Sandbox 所需的挂载配置。
const config = filesystem.getMountConfig()
// { type: 's3', bucket: 'my-bucket', region: 'us-east-1', ... }
挂载到 E2B Sandbox挂载到 E2B Sandbox的直接链接
可以将 S3Filesystem 挂载到 E2B Sandbox,使存储桶能以本地目录的形式访问:
import { Workspace } from '@mastra/core/workspace'
import { S3Filesystem } from '@mastra/s3'
import { E2BSandbox } from '@mastra/e2b'
const workspace = new Workspace({
mounts: {
'/data': new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
},
sandbox: new E2BSandbox({ id: 'dev-sandbox' }),
})
有关挂载的更多详细信息,请参阅 E2BSandbox 参考文档。