From 13570689ddd7e04c0dfffeefce96bd3ebed24feb Mon Sep 17 00:00:00 2001 From: philipcheung Date: Sat, 12 Sep 2026 09:56:32 +0800 Subject: [PATCH] Add media helper for R2 keys and cleanup --- src/lib/media.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/lib/media.ts diff --git a/src/lib/media.ts b/src/lib/media.ts new file mode 100644 index 0000000..374fbf7 --- /dev/null +++ b/src/lib/media.ts @@ -0,0 +1,28 @@ +import type { AppEnv } from "./env"; + +export const MEDIA_PREFIX = "/media/"; + +/** 由 R2 key 砌出對外 URL。 */ +export function mediaUrl(key: string): string { + return `${MEDIA_PREFIX}${key}`; +} + +/** 由 /media/... URL 取出 R2 key;唔係 /media/ 開頭回 null。 */ +export function mediaKey(url: string | null | undefined): string | null { + if (!url || !url.startsWith(MEDIA_PREFIX)) return null; + return url.slice(MEDIA_PREFIX.length); +} + +/** 刪除 /media/... 對應嘅 R2 物件;外部 URL 或空值唔理,唔會 throw。 */ +export async function deleteMedia( + env: AppEnv, + url: string | null | undefined, +): Promise { + const key = mediaKey(url); + if (!key) return; + try { + await env.MEDIA.delete(key); + } catch { + // 刪除失敗唔應該阻礙儲存流程。 + } +}