S3Filesystem
將檔案儲存在 Amazon S3,或 Cloudflare R2、MinIO、DigitalOcean Spaces 與 Tigris 等 S3 相容儲存服務中。介面詳情請參閱 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 package:
- 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 R2「Cloudflare 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,
})
MinIO「MinIO」的直接連結
import { S3Filesystem } from '@mastra/s3'
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
endpoint: 'http://localhost:9000',
accessKeyId: 'minioadmin',
secretAccessKey: 'minioadmin',
})
Tigris「Tigris」的直接連結
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(提供自訂 endpoint 時,預設值為 true)。請從 Tigris 儀表板 建立憑證。access key 的前綴為 tid_,secret 的前綴為 tsec_。
建構函式參數「建構函式參數」的直接連結
bucket:
region:
credentials?:
@aws-sdk/credential-providers 的 fromNodeProviderChain())。優先於 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」的直接連結
初始化檔案系統。驗證 bucket 存取與憑證。
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,讓 bucket 可作為本機目錄存取:
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 參考。