feat(media): default to s3 with local upload fallback

This commit is contained in:
2026-02-12 18:16:11 +01:00
parent 19738b77d8
commit 86a8af25d8
4 changed files with 28 additions and 14 deletions

View File

@@ -3,8 +3,8 @@ import { describe, expect, it } from "vitest"
import { resolveMediaStorageProvider } from "@/lib/media/storage"
describe("resolveMediaStorageProvider", () => {
it("defaults to local when unset", () => {
expect(resolveMediaStorageProvider(undefined)).toBe("local")
it("defaults to s3 when unset", () => {
expect(resolveMediaStorageProvider(undefined)).toBe("s3")
})
it("resolves s3", () => {
@@ -12,7 +12,12 @@ describe("resolveMediaStorageProvider", () => {
expect(resolveMediaStorageProvider("S3")).toBe("s3")
})
it("falls back to local for unknown values", () => {
expect(resolveMediaStorageProvider("foo")).toBe("local")
it("resolves local explicitly", () => {
expect(resolveMediaStorageProvider("local")).toBe("local")
expect(resolveMediaStorageProvider("LOCAL")).toBe("local")
})
it("falls back to s3 for unknown values", () => {
expect(resolveMediaStorageProvider("foo")).toBe("s3")
})
})

View File

@@ -14,21 +14,29 @@ type StoredUpload = {
}
export function resolveMediaStorageProvider(raw: string | undefined): MediaStorageProvider {
if (raw?.toLowerCase() === "s3") {
return "s3"
if (raw?.toLowerCase() === "local") {
return "local"
}
return "local"
return "s3"
}
export async function storeUpload(params: StoreUploadParams): Promise<StoredUpload> {
const provider = resolveMediaStorageProvider(process.env.CMS_MEDIA_STORAGE_PROVIDER)
if (provider === "s3") {
const stored = await storeUploadToS3(params)
return {
...stored,
provider,
try {
const stored = await storeUploadToS3(params)
return {
...stored,
provider,
}
} catch {
const fallbackStored = await storeUploadLocally(params)
return {
...fallbackStored,
provider: "local",
}
}
}