release: v1.1.0 — S3 multi-backend storage and admin UI
ci / ci (22, ubuntu-latest) (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
GitHub Release / release (push) Canceled after 0s
ci / ci (22, ubuntu-latest) (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
GitHub Release / release (push) Canceled after 0s
This commit is contained in:
1 parent
7c45a78572
commit
acc64751ef
46 files changed
+4005
-480
No files matched your search
@@ -2,7 +2,9 @@ import type { H3Event } from 'h3'
|
||||
import { IMAGE_CACHE_CONTROL } from './constants'
|
||||
import { getAllowedRefererHostsRaw } from './env'
|
||||
import { validateImageKey } from './image-key'
|
||||
import { buildPublicImageUrl } from './image-response'
|
||||
import { createImageStream, headImage } from './storage'
|
||||
import { getBackendRowForKey } from './storage/resolver'
|
||||
|
||||
/**
|
||||
* 图片直链处理(/{type}/YYYY/MM/file)
|
||||
@@ -82,6 +84,12 @@ export async function serveImageByKey(event: H3Event, key: string) {
|
||||
throw createError({ statusCode: 404, statusMessage: 'Not Found' })
|
||||
}
|
||||
|
||||
const backendRow = await getBackendRowForKey(key)
|
||||
if (backendRow.serving_mode === 'public' && backendRow.public_url) {
|
||||
const publicUrl = buildPublicImageUrl(backendRow, key)
|
||||
return sendRedirect(event, publicUrl, 302)
|
||||
}
|
||||
|
||||
const etag = `"${stored.size}-${Math.round(stored.mtimeMs)}"`
|
||||
|
||||
setHeader(event, 'ETag', etag)
|
||||
@@ -116,9 +124,9 @@ export async function serveImageByKey(event: H3Event, key: string) {
|
||||
setResponseStatus(event, 206)
|
||||
setHeader(event, 'Content-Range', `bytes ${range.start}-${range.end}/${stored.size}`)
|
||||
setHeader(event, 'Content-Length', range.end - range.start + 1)
|
||||
return sendStream(event, createImageStream(key, range))
|
||||
return sendStream(event, await createImageStream(key, range))
|
||||
}
|
||||
|
||||
setHeader(event, 'Content-Length', stored.size)
|
||||
return sendStream(event, createImageStream(key))
|
||||
return sendStream(event, await createImageStream(key))
|
||||
}
|
||||
Reference in new issue
Block a user