클라우드 샌드박스로 파일 복사하기

클라우드 샌드박스로 파일 복사하기

프로젝트 파일, 스크립트, 입력 데이터를 실행 중인 샌드박스로 보내 봐요. 큰 파일 콘텐츠를 명령 인자에 넣는 대신 파일 컬렉션을 사용하세요.

출처: 문서

본문

첫 번째 샌드박스에서 얻은 샌드박스 핸들과 절대 대상 경로가 필요해요. 이 예시의 경로는 컴퓨터가 아니라 샌드박스 안의 것이에요.

대상 디렉터리 만들기

원하는 권한 모드로 대상 디렉터리를 만들어요. 예시는 누락된 상위 디렉터리도 만들어요.

워크로드가 필요로 하는 가장 좁은 권한을 선택하세요. 파일의 콘텐츠와 실행 권한은 별개의 설정이라는 것을 기억하세요.

핵심 코드:

await sandbox.files.mkdir(path, { mode, parents: true });

완전한 TypeScript 예시: upload/mkdir.ts

import type { Sandbox } from '@docker/sandboxes';

export async function makeDirectory(
  sandbox: Sandbox,
  path: string,
  mode: number,
) {
  await sandbox.files.mkdir(path, { mode, parents: true });
}

작은 텍스트 파일 쓰기

이미 문자열로 보유한 구성 파일이나 짧은 스크립트에는 write 헬퍼를 사용하세요. 대상 경로와 콘텐츠를 전달해요. 바이너리 데이터나 스트리밍 전송은 upload를 대신 사용하세요.

핵심 코드:

return sandbox.files.write(path, content);

완전한 TypeScript 예시: upload/write.ts

import type { Sandbox } from '@docker/sandboxes';

export async function writeFile(
  sandbox: Sandbox,
  path: string,
  content: string,
) {
  return sandbox.files.write(path, content);
}

파일 콘텐츠 업로드

바이트를 대상에 업로드하고 이후 그 메타데이터를 읽어요. 예시는 애플리케이션에서 콘텐츠를 받아요. 소스가 로컬 파일이라면 먼저 로컬 파일을 읽으세요.

실행 권한이나 제한된 권한이 중요할 때는 파일 모드를 명시적으로 선택하세요. 실패한 업로드는 일부 데이터를 썼을 수 있어요. 콘텐츠를 교체하는 것이 안전하지 않다면 재시도 전에 대상을 검사하세요.

다음으로 파일을 읽는 명령을 실행하거나, 다시 읽어 콘텐츠를 확인하세요.

핵심 코드:

await sandbox.files.upload(path, content, { mode });
return (await sandbox.files.stat(path)).info;

완전한 TypeScript 예시: upload/upload.ts

import type { Sandbox } from '@docker/sandboxes';

export async function uploadFile(
  sandbox: Sandbox,
  path: string,
  content: Uint8Array,
  mode: number,
) {
  await sandbox.files.upload(path, content, { mode });
  return (await sandbox.files.stat(path)).info;
}

더 알아보기 (Learn more)