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 套件:
- 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?:
@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)- 取得檔案或目錄的 metadata
init()init 的直接連結
初始化檔案系統,並驗證 bucket 存取權及憑證。
await filesystem.init()
getInfo()getinfo 的直接連結
傳回此檔案系統執行個體的 metadata。
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 參考。