관리자 업로드 제한 설정 추가
This commit is contained in:
@@ -26,6 +26,15 @@ const VIDEO_EXTENSIONS = new Set(['.mp4', '.webm', '.mov'])
|
||||
const AUDIO_EXTENSIONS = new Set(['.mp3', '.wav', '.ogg', '.m4a'])
|
||||
const IMAGE_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png', '.webp', '.gif'])
|
||||
|
||||
export const DEFAULT_UPLOAD_MAX_FILE_COUNT = 20
|
||||
export const DEFAULT_UPLOAD_MAX_TOTAL_SIZE = 314572800
|
||||
export const MIN_UPLOAD_MAX_FILE_COUNT = 1
|
||||
export const MAX_UPLOAD_MAX_FILE_COUNT = 50
|
||||
export const MIN_UPLOAD_MAX_TOTAL_SIZE = 1048576
|
||||
export const MAX_UPLOAD_MAX_TOTAL_SIZE = 1073741824
|
||||
export const UPLOAD_FILE_COUNT_OPTIONS = [5, 10, 20, 30, 50]
|
||||
export const UPLOAD_TOTAL_SIZE_OPTIONS = [52428800, 104857600, 209715200, 314572800, 524288000, 1073741824]
|
||||
|
||||
/** @type {Record<string, string>} 업로드 종류 한글 라벨 */
|
||||
const UPLOAD_KIND_LABELS = {
|
||||
[UPLOAD_KIND.image]: '이미지',
|
||||
@@ -47,6 +56,69 @@ export const buildDefaultUploadSizeLimits = (overrides = {}) => ({
|
||||
...overrides
|
||||
})
|
||||
|
||||
/**
|
||||
* 업로드 최대 파일 수를 정규화한다.
|
||||
* @param {unknown} value - 원본 값
|
||||
* @returns {number} 최대 파일 수
|
||||
*/
|
||||
export const normalizeUploadMaxFileCount = (value) => {
|
||||
const parsed = Number(value)
|
||||
if (!Number.isFinite(parsed)) {
|
||||
return DEFAULT_UPLOAD_MAX_FILE_COUNT
|
||||
}
|
||||
|
||||
const rounded = Math.round(parsed)
|
||||
if (rounded < MIN_UPLOAD_MAX_FILE_COUNT) {
|
||||
return MIN_UPLOAD_MAX_FILE_COUNT
|
||||
}
|
||||
if (rounded > MAX_UPLOAD_MAX_FILE_COUNT) {
|
||||
return MAX_UPLOAD_MAX_FILE_COUNT
|
||||
}
|
||||
|
||||
return rounded
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 최대 총량을 정규화한다.
|
||||
* @param {unknown} value - 원본 값
|
||||
* @returns {number} 최대 총량 바이트
|
||||
*/
|
||||
export const normalizeUploadMaxTotalSize = (value) => {
|
||||
const parsed = Number(value)
|
||||
if (!Number.isFinite(parsed)) {
|
||||
return DEFAULT_UPLOAD_MAX_TOTAL_SIZE
|
||||
}
|
||||
|
||||
const rounded = Math.round(parsed)
|
||||
if (rounded < MIN_UPLOAD_MAX_TOTAL_SIZE) {
|
||||
return MIN_UPLOAD_MAX_TOTAL_SIZE
|
||||
}
|
||||
if (rounded > MAX_UPLOAD_MAX_TOTAL_SIZE) {
|
||||
return MAX_UPLOAD_MAX_TOTAL_SIZE
|
||||
}
|
||||
|
||||
return rounded
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 파일 크기를 반환한다.
|
||||
* @param {Object} file - 브라우저 File 또는 서버 multipart 파일 파트
|
||||
* @returns {number} 파일 크기
|
||||
*/
|
||||
export const getUploadFileSize = (file) => {
|
||||
const size = file?.size ?? file?.data?.length ?? 0
|
||||
const parsed = Number(size)
|
||||
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 파일 전체 크기를 반환한다.
|
||||
* @param {Iterable<Object>|ArrayLike<Object>} files - 업로드 파일 목록
|
||||
* @returns {number} 전체 크기
|
||||
*/
|
||||
export const getUploadFilesTotalSize = (files) => Array.from(files || [])
|
||||
.reduce((total, file) => total + getUploadFileSize(file), 0)
|
||||
|
||||
/**
|
||||
* MIME·파일명으로 업로드 종류를 판별한다.
|
||||
* @param {string} [mimeType] - MIME 타입
|
||||
|
||||
Reference in New Issue
Block a user