feat: 优化文件上传命名规范并增强存储键名唯一性
This commit is contained in:
1 parent
44f81ef0c7
commit
842af264e2
1 file changed
+6
-3
@@ -64,12 +64,15 @@ export const actions: Actions = {
|
|||||||
return fail(400, { error: '没有提供有效的文件' });
|
return fail(400, { error: '没有提供有效的文件' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate unique key with year-month grouping (e.g. uploads/2026-07/timestamp-random.ext)
|
// Generate timestamp-based filename and robust physical key
|
||||||
const ext = file.name.split('.').pop() || '';
|
const ext = file.name.split('.').pop() || '';
|
||||||
const randomStr = Math.random().toString(36).substring(2, 8);
|
const randomStr = Math.random().toString(36).substring(2, 8);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const yearMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;
|
const yearMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;
|
||||||
const key = `uploads/${yearMonth}/${Date.now()}-${randomStr}.${ext}`;
|
const yyyymmdd = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, '0')}${String(now.getDate()).padStart(2, '0')}`;
|
||||||
|
const hhmmss = `${String(now.getHours()).padStart(2, '0')}${String(now.getMinutes()).padStart(2, '0')}${String(now.getSeconds()).padStart(2, '0')}`;
|
||||||
|
const newFilename = `${yyyymmdd}_${hhmmss}.${ext}`;
|
||||||
|
const key = `uploads/${yearMonth}/${yyyymmdd}_${hhmmss}_${randomStr}.${ext}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Upload to R2
|
// Upload to R2
|
||||||
@@ -81,7 +84,7 @@ export const actions: Actions = {
|
|||||||
await ensureAttachmentsTable(db); // Defensive checking
|
await ensureAttachmentsTable(db); // Defensive checking
|
||||||
await db.prepare(
|
await db.prepare(
|
||||||
'INSERT INTO attachments (filename, key, mime_type, size) VALUES (?, ?, ?, ?)'
|
'INSERT INTO attachments (filename, key, mime_type, size) VALUES (?, ?, ?, ?)'
|
||||||
).bind(file.name, key, file.type, file.size).run();
|
).bind(newFilename, key, file.type, file.size).run();
|
||||||
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
|
|||||||
Reference in new issue
Block a user