release: v1.4.1 — 上传策略设置、保留原图与上传 tagNames
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
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 支持按标签名称打标。
This commit is contained in:
1 parent
d0eb364645
commit
6cc4f27f7d
25 files changed
+1354
-172
No files matched your search
@@ -2,10 +2,6 @@ import sharp from 'sharp'
|
||||
import type { H3Event } from 'h3'
|
||||
import type { ImageItem, UploadErrorItem } from '~/types/image'
|
||||
import type { AllowedMimeType } from './constants'
|
||||
import {
|
||||
ALLOWED_MIME_TYPES,
|
||||
MAX_FILE_SIZE
|
||||
} from './constants'
|
||||
import {
|
||||
detectMimeFromSignature,
|
||||
isAllowedMimeType,
|
||||
@@ -15,6 +11,12 @@ import type { LogSource } from './db'
|
||||
import { generateImageKey } from './image-key'
|
||||
import { buildImageItem, sanitizeOriginalName } from './image-response'
|
||||
import { getStorageLayout, getWebpQuality } from './env'
|
||||
import {
|
||||
formatMaxFileSizeMessage,
|
||||
getMaxFileSizeBytes,
|
||||
isMimeTypeAllowed,
|
||||
isPreserveOriginalUpload
|
||||
} from './upload-policy'
|
||||
import { logActivity } from './activity-log'
|
||||
import { attachTagsAfterUpload, getTagsForImageKeys } from './tags'
|
||||
import { putImage } from './storage'
|
||||
@@ -71,13 +73,13 @@ export async function processSingleImageUpload(
|
||||
const originalName = sanitizeOriginalName(input.filename ?? 'image')
|
||||
const bytes = input.bytes
|
||||
|
||||
if (bytes.byteLength > MAX_FILE_SIZE) {
|
||||
if (bytes.byteLength > getMaxFileSizeBytes()) {
|
||||
return {
|
||||
error: {
|
||||
name: originalName,
|
||||
error: {
|
||||
code: 'FILE_TOO_LARGE',
|
||||
message: '图片大小不能超过 10 MB'
|
||||
message: formatMaxFileSizeMessage()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,7 +98,7 @@ export async function processSingleImageUpload(
|
||||
}
|
||||
}
|
||||
|
||||
if (!ALLOWED_MIME_TYPES.includes(detectedMime)) {
|
||||
if (!isMimeTypeAllowed(detectedMime)) {
|
||||
return {
|
||||
error: {
|
||||
name: originalName,
|
||||
@@ -120,7 +122,9 @@ export async function processSingleImageUpload(
|
||||
}
|
||||
}
|
||||
|
||||
const compressed = await compressToWebp(bytes, detectedMime, getWebpQuality(event))
|
||||
const compressed = isPreserveOriginalUpload()
|
||||
? { bytes, mime: detectedMime }
|
||||
: await compressToWebp(bytes, detectedMime, getWebpQuality(event))
|
||||
|
||||
const uploadedAt = new Date().toISOString()
|
||||
const layout = getStorageLayout(event)
|
||||
|
||||
Reference in new issue
Block a user