관리자 업로드 제한 설정 추가

This commit is contained in:
2026-07-01 17:58:30 +09:00
parent 129b68b939
commit e5d3eac2fd
17 changed files with 308 additions and 20 deletions

View File

@@ -29,20 +29,30 @@ import { isPostCardThumbnailUrl } from '../../lib/post-card-thumbnail-url.js'
import { getTextareaCaretCoordinates } from '../../lib/textarea-caret-coordinates.js'
import {
buildDefaultUploadSizeLimits,
DEFAULT_UPLOAD_MAX_FILE_COUNT,
DEFAULT_UPLOAD_MAX_TOTAL_SIZE,
formatUploadSizeLimit,
getUploadFilesTotalSize,
getMaxUploadBytesForKind,
getUploadKind
getUploadKind,
normalizeUploadMaxFileCount,
normalizeUploadMaxTotalSize
} from '../../lib/upload-size-limit.js'
import AdminSlashCommandIcon from './AdminSlashCommandIcon.vue'
const { toast, showToast } = useAdminToast()
const runtimeConfig = useRuntimeConfig()
const { data: uploadSettings } = useFetch('/admin/api/settings', {
key: 'admin-markdown-editor-upload-settings'
})
const uploadSizeLimits = computed(() => buildDefaultUploadSizeLimits({
image: Number(runtimeConfig.public.maxFileSize || 10485760),
video: Number(runtimeConfig.public.maxVideoFileSize || 209715200),
audio: Number(runtimeConfig.public.maxAudioFileSize || 52428800),
document: Number(runtimeConfig.public.maxDocumentFileSize || 52428800)
}))
const uploadMaxFileCount = computed(() => normalizeUploadMaxFileCount(uploadSettings.value?.uploadMaxFileCount || DEFAULT_UPLOAD_MAX_FILE_COUNT))
const uploadMaxTotalSize = computed(() => normalizeUploadMaxTotalSize(uploadSettings.value?.uploadMaxTotalSize || DEFAULT_UPLOAD_MAX_TOTAL_SIZE))
const props = defineProps({
modelValue: {
@@ -3241,7 +3251,19 @@ const resolveUploadFetchErrorMessage = (error) => {
* @returns {string|null} 초과 시 오류 메시지, 아니면 null
*/
const findUploadSizeLimitError = (files) => {
for (const file of Array.from(files)) {
const fileList = Array.from(files || [])
if (fileList.length > uploadMaxFileCount.value) {
return `한 번에 업로드할 수 있는 파일은 최대 ${uploadMaxFileCount.value}개입니다.`
}
const uploadTotalSize = getUploadFilesTotalSize(fileList)
if (uploadTotalSize > uploadMaxTotalSize.value) {
return `한 번에 업로드 가능한 전체 용량을 초과했습니다. (최대 ${formatUploadSizeLimit(uploadMaxTotalSize.value)})`
}
for (const file of fileList) {
const uploadKind = getUploadKind(file.type, file.name)
const maxBytes = getMaxUploadBytesForKind(uploadKind, uploadSizeLimits.value)