feat: cap upload size at 1 GiB by default (UPLOAD_MAX_BYTES override)
기본 업로드 한도를 1 GiB (1073741824 바이트) 로 설정. .env 의 UPLOAD_MAX_BYTES 로 바꿀 수 있고, 0 이나 Infinity 로 두면 무제한. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,8 @@ PORT=3000
|
|||||||
SESSION_SECRET=change-me-please
|
SESSION_SECRET=change-me-please
|
||||||
|
|
||||||
# 업로드/타임아웃 ─────────────────────────────────────────────────
|
# 업로드/타임아웃 ─────────────────────────────────────────────────
|
||||||
# 업로드 용량 한도(바이트). 비우거나 미설정이면 무제한.
|
# 업로드 용량 한도(바이트). 1 GiB = 1073741824. 비우거나 미설정이면 무제한.
|
||||||
# UPLOAD_MAX_BYTES=
|
UPLOAD_MAX_BYTES=1073741824
|
||||||
|
|
||||||
# HTTP 요청 타임아웃(밀리초). 0 또는 미설정이면 무제한 (10GB 업로드 같은 케이스 대비).
|
# HTTP 요청 타임아웃(밀리초). 0 또는 미설정이면 무제한 (10GB 업로드 같은 케이스 대비).
|
||||||
# HTTP_REQUEST_TIMEOUT_MS=0
|
# HTTP_REQUEST_TIMEOUT_MS=0
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ npm start
|
|||||||
- `HOST` — 바인딩 주소. 외부 노출이 필요하면 `0.0.0.0`, 로컬 전용이면 `127.0.0.1`.
|
- `HOST` — 바인딩 주소. 외부 노출이 필요하면 `0.0.0.0`, 로컬 전용이면 `127.0.0.1`.
|
||||||
- `PORT` — 바인딩 포트 (기본 `3000`).
|
- `PORT` — 바인딩 포트 (기본 `3000`).
|
||||||
- `SESSION_SECRET` — 운영 시 반드시 충분히 긴 랜덤 문자열로 교체.
|
- `SESSION_SECRET` — 운영 시 반드시 충분히 긴 랜덤 문자열로 교체.
|
||||||
- `UPLOAD_MAX_BYTES` — 업로드 용량 한도(바이트). 비우면 무제한.
|
- `UPLOAD_MAX_BYTES` — 업로드 용량 한도(바이트). 기본 `1073741824` (1 GiB). 비우면 무제한.
|
||||||
- `HTTP_REQUEST_TIMEOUT_MS` — 대용량 업로드용 HTTP 요청 타임아웃(밀리초). `0`/미설정이면 무제한.
|
- `HTTP_REQUEST_TIMEOUT_MS` — 대용량 업로드용 HTTP 요청 타임아웃(밀리초). `0`/미설정이면 무제한.
|
||||||
- 관리자 비밀번호는 `account.json` 의 `password` 값 (초기값 `admin`, 운영 시 반드시 변경).
|
- 관리자 비밀번호는 `account.json` 의 `password` 값 (초기값 `admin`, 운영 시 반드시 변경).
|
||||||
|
|
||||||
|
|||||||
@@ -31,10 +31,16 @@ import { FfmpegUnavailableError, applyTrimToVideo } from '../editor.js'
|
|||||||
|
|
||||||
export const opRouter = Router()
|
export const opRouter = Router()
|
||||||
|
|
||||||
// 업로드 용량 상한은 환경변수 UPLOAD_MAX_BYTES 로 조정. 기본은 사실상 무제한(Infinity).
|
// 업로드 용량 상한. 기본 1 GiB. UPLOAD_MAX_BYTES 환경변수로 변경 가능.
|
||||||
const uploadMaxBytes = process.env.UPLOAD_MAX_BYTES
|
// 명시적으로 무제한이 필요하면 UPLOAD_MAX_BYTES=0 (또는 Infinity).
|
||||||
? Math.max(1, Number(process.env.UPLOAD_MAX_BYTES))
|
const DEFAULT_UPLOAD_MAX_BYTES = 1024 * 1024 * 1024
|
||||||
: Infinity
|
const uploadMaxBytes = (() => {
|
||||||
|
const raw = process.env.UPLOAD_MAX_BYTES
|
||||||
|
if (raw === undefined || raw === '') return DEFAULT_UPLOAD_MAX_BYTES
|
||||||
|
const n = Number(raw)
|
||||||
|
if (!Number.isFinite(n) || n <= 0) return Infinity
|
||||||
|
return Math.max(1, n)
|
||||||
|
})()
|
||||||
const upload = multer({
|
const upload = multer({
|
||||||
dest: tmpDir,
|
dest: tmpDir,
|
||||||
limits: { fileSize: uploadMaxBytes }
|
limits: { fileSize: uploadMaxBytes }
|
||||||
|
|||||||
Reference in New Issue
Block a user