Files
FileHost/server/api/site-sync/object.get.ts
T
2026-10-17 14:41:32 +08:00

27 lines
1.0 KiB
TypeScript

import { getQuery, sendStream, setResponseHeader } from 'h3'
import { requireSiteSyncAuth } from '../../utils/access'
import { createApiError } from '../../utils/api-error'
import { validateStorageKey } from '../../utils/image-key'
import { getBackendForKey } from '../../utils/storage/resolver'
export default defineEventHandler(async (event) => {
await requireSiteSyncAuth(event)
const query = getQuery(event)
const key = typeof query.key === 'string' ? query.key.trim() : ''
if (!validateStorageKey(key)) {
createApiError(event, 'INVALID_REQUEST', '同步对象 key 无效', 400)
}
const backend = await getBackendForKey(key)
const stored = await backend.head(key)
if (!stored) {
createApiError(event, 'IMAGE_NOT_FOUND', `目标对象不存在:${key}`, 404)
}
setResponseHeader(event, 'Content-Type', stored.contentType)
setResponseHeader(event, 'Content-Length', stored.size)
setResponseHeader(event, 'Cache-Control', 'no-store')
return sendStream(event, await backend.createStream(key))
})