Files
blogflare/src/routes/admin/api/upload/+server.ts
T

36 lines
1.2 KiB
TypeScript

import { parseAndValidateUpload, storeUpload, UploadValidationError } from '$lib/server/uploads';
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
export const POST: RequestHandler = async ({ request, platform }) => {
const db = platform?.env.DB;
const r2 = platform?.env.R2;
if (!db || !r2) return json({ error: '数据库或 R2 存储未连接' }, { status: 500 });
try {
const domainResult = await db
.prepare('SELECT value FROM settings WHERE key = ?')
.bind('r2.public_domain')
.first<{ value: string }>();
const publicDomain = (domainResult?.value || 'https://assets.yourdomain.com').replace(
/\/$/,
''
);
const file = await parseAndValidateUpload(request);
const stored = await storeUpload(db, r2, file);
return json({
success: true,
url: `${publicDomain}/${stored.key}`,
key: stored.key,
filename: stored.filename
});
} catch (cause) {
if (cause instanceof UploadValidationError) {
return json({ error: cause.message }, { status: cause.status });
}
console.error('Upload failed:', cause);
return json({ error: '文件上传失败,请稍后重试' }, { status: 500 });
}
};