36 lines
1.2 KiB
TypeScript
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 });
|
|
}
|
|
};
|