← Sandbox SDK / sandbox / api
Файлы
Читайте, записывайте и управляйте файлами в файловой системе sandbox. Все пути абсолютные (например, /workspace/app.js).
Методы
writeFile()
Запись содержимого в файл.
await sandbox.writeFile(path: string, content: string, options?: WriteFileOptions): Promise<void>Параметры:
path- Абсолютный путь к файлуcontent- Содержимое для записиoptions(необязательно):encoding- Кодировка файла ("utf-8"или"base64", по умолчанию:"utf-8")
await sandbox.writeFile("/workspace/app.js", `console.log('Hello!');`);
// Binary data
await sandbox.writeFile("/tmp/image.png", base64Data, { encoding: "base64" });await sandbox.writeFile('/workspace/app.js', `console.log('Hello!');`);
// Binary data
await sandbox.writeFile('/tmp/image.png', base64Data, { encoding: 'base64' });Большие файлы и двоичные данные
При использовании rpc транспорт writeFile() метод поддерживает передачу ReadableStream в качестве content параметр. Это позволяет передавать бинарные данные и файлы размером более 32 MiB должен быть записан в sandbox. Он заменяет "base64" опцию кодировки.
// Requires SANDBOX_TRANSPORT to be "rpc" in wrangler.jsonc
const req = await fetch("https://example.com/archive.tar.gz");
await sandbox.writeFile('/workspace/archive.tar.gz', req.body);readFile()
Считайте файл из sandbox. По умолчанию содержимое возвращается в виде строки. Это удобно для небольших текстовых файлов. Для файлов большего размера и двоичных данных используйте encoding: "none" чтобы получить в ответ ReadableStream с данными файла.
const file = await sandbox.readFile(path: string, options?: ReadFileOptions): Promise<ReadFileResult | ReadFileStreamResult>Параметры:
path- Абсолютный путь к файлуoptions(необязательно):encoding- Кодировка файла ("utf-8","base64"или"none", по умолчанию: определяется автоматически по MIME-типу)
Возвращает: Promise<ReadFileResult | ReadFileStreamResult>.
const file = await sandbox.readFile("/workspace/package.json");
const pkg = JSON.parse(file.content);
// Binary data (since 0.10.1 using `rpc` transport)
const { content, size, mimeType } = await sandbox.readFile(
"/workspace/archive.tar.gz",
{
encoding: "none",
},
);
// Example 1: Store on R2:
const stream = request.body.pipeThrough(new FixedLengthStream(size));
await env.MY_BUCKET.put("/bucket/archive.tar.gz", stream, {
httpMetadata: { contentType: mimeType },
});
// Example 2: Stream an HTTP response:
return new Response(content, { headers: { "Content-Type": mimeType } });
// Older versions/transports used the base64 encoding for binary data:
const archive = await sandbox.readFile("/workspace/archive.tar.gz", {
encoding: "base64",
});
console.log(archive.content); // => "<base64 encoded string>";const file = await sandbox.readFile('/workspace/package.json');
const pkg = JSON.parse(file.content);
// Binary data (since 0.10.1 using `rpc` transport)
const { content, size, mimeType } = await sandbox.readFile("/workspace/archive.tar.gz", {
encoding: "none"
});
// Example 1: Store on R2:
const stream = request.body.pipeThrough(new FixedLengthStream(size));
await env.MY_BUCKET.put('/bucket/archive.tar.gz', stream, {
httpMetadata: { contentType: mimeType }
});
// Example 2: Stream an HTTP response:
return new Response(content, { headers: { "Content-Type": mimeType } });
// Older versions/transports used the base64 encoding for binary data:
const archive = await sandbox.readFile("/workspace/archive.tar.gz", {
encoding: "base64"
});
console.log(archive.content); // => "<base64 encoded string>";exists()
Проверка существования файла или каталога.
const result = await sandbox.exists(path: string): Promise<FileExistsResult>Параметры:
path- Абсолютный путь для проверки
Возвращает: Promise<FileExistsResult> с exists boolean
const result = await sandbox.exists("/workspace/package.json");
if (result.exists) {
const file = await sandbox.readFile("/workspace/package.json");
// process file
}
// Check directory
const dirResult = await sandbox.exists("/workspace/src");
if (!dirResult.exists) {
await sandbox.mkdir("/workspace/src");
}const result = await sandbox.exists('/workspace/package.json');
if (result.exists) {
const file = await sandbox.readFile('/workspace/package.json');
// process file
}
// Check directory
const dirResult = await sandbox.exists('/workspace/src');
if (!dirResult.exists) {
await sandbox.mkdir('/workspace/src');
}mkdir()
Создайте каталог.
await sandbox.mkdir(path: string, options?: MkdirOptions): Promise<void>Параметры:
path- Абсолютный путь к каталогуoptions(необязательно):recursive- Создавайте родительские каталоги при необходимости (по умолчанию:false)
await sandbox.mkdir("/workspace/src");
// Nested directories
await sandbox.mkdir("/workspace/src/components/ui", { recursive: true });await sandbox.mkdir('/workspace/src');
// Nested directories
await sandbox.mkdir('/workspace/src/components/ui', { recursive: true });deleteFile()
Удалите файл.
await sandbox.deleteFile(path: string): Promise<void>Параметры:
path- Абсолютный путь к файлу
await sandbox.deleteFile("/workspace/temp.txt");await sandbox.deleteFile('/workspace/temp.txt');renameFile()
Переименовывает файл.
await sandbox.renameFile(oldPath: string, newPath: string): Promise<void>Параметры:
oldPath- Путь к текущему файлуnewPath- Новый путь к файлу
await sandbox.renameFile("/workspace/draft.txt", "/workspace/final.txt");await sandbox.renameFile('/workspace/draft.txt', '/workspace/final.txt');moveFile()
Переместите файл в другой каталог.
await sandbox.moveFile(sourcePath: string, destinationPath: string): Promise<void>Параметры:
sourcePath- Путь к текущему файлуdestinationPath- Путь назначения
await sandbox.moveFile("/tmp/download.txt", "/workspace/data.txt");await sandbox.moveFile('/tmp/download.txt', '/workspace/data.txt');gitCheckout()
Клонирование репозитория Git.
await sandbox.gitCheckout(repoUrl: string, options?: GitCheckoutOptions): Promise<void>Параметры:
repoUrl- URL Git-репозиторияoptions(необязательно):branch- Ветка для переключения (по умолчанию: ветка репозитория по умолчанию)targetDir- Каталог для клонирования (по умолчанию:/workspace/{repoName})depth- Глубина клонирования для неполных клонов (например,1только для последнего коммита)
await sandbox.gitCheckout("https://github.com/user/repo");
// Specific branch
await sandbox.gitCheckout("https://github.com/user/repo", {
branch: "develop",
targetDir: "/workspace/my-project",
});
// Shallow clone (faster for large repositories)
await sandbox.gitCheckout("https://github.com/facebook/react", {
depth: 1,
});await sandbox.gitCheckout('https://github.com/user/repo');
// Specific branch
await sandbox.gitCheckout('https://github.com/user/repo', {
branch: 'develop',
targetDir: '/workspace/my-project'
});
// Shallow clone (faster for large repositories)
await sandbox.gitCheckout('https://github.com/facebook/react', {
depth: 1
});Дополнительные материалы
- Руководство по управлению файлами - Подробное руководство с лучшими практиками
- Commands API - Выполнение команд