GitHub Release / release (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
管理员可在设置页配置上传大小、格式、限流与保留原图;上传 API 支持按标签名称打标。
31 lines
886 B
TypeScript
31 lines
886 B
TypeScript
import type { MultiPartData } from 'h3'
|
|
|
|
export function readMultipartFormFieldValues(
|
|
formData: MultiPartData[],
|
|
fieldName: string
|
|
): string[] {
|
|
const field = formData.find(part => part.name === fieldName)
|
|
if (field?.data?.length) {
|
|
const raw = new TextDecoder().decode(field.data).trim()
|
|
if (!raw) return []
|
|
try {
|
|
const parsed = JSON.parse(raw) as unknown
|
|
if (Array.isArray(parsed)) {
|
|
return parsed.map(item => String(item).trim()).filter(Boolean)
|
|
}
|
|
} catch {
|
|
// fall through to comma-separated parsing
|
|
}
|
|
return raw.split(',').map(item => item.trim()).filter(Boolean)
|
|
}
|
|
|
|
const repeatFields = formData.filter(
|
|
part => part.name === fieldName && part.data?.length
|
|
)
|
|
if (!repeatFields.length) return []
|
|
|
|
return repeatFields
|
|
.map(part => new TextDecoder().decode(part.data!).trim())
|
|
.filter(Boolean)
|
|
}
|