diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index 125d0473..f6ab1987 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -14,7 +14,7 @@ export class StorageModel { static coll = db.collection('storage'); static generateId(ext: string) { - return `${nanoid(3).replace(/[_-]/g, '0')}/${nanoid().replace(/[_-]/g, '0')}${ext}`; + return `${nanoid(3).replace(/[_-]/g, '0')}/${nanoid().replace(/[_-]/g, '0')}${ext}`.toLowerCase(); } static async put(path: string, file: string | Buffer | Readable, owner?: number) { @@ -106,10 +106,10 @@ export class StorageModel { meta['Content-Type'] = (dst.endsWith('.ans') || dst.endsWith('.out')) ? 'text/plain' : lookup(dst) || 'application/octet-stream'; - let _id = `${nanoid(3)}/${nanoid()}${extname(dst)}`; + let _id = StorageModel.generateId(extname(dst)); // Make sure id is not used // eslint-disable-next-line no-await-in-loop - while (await StorageModel.coll.findOne({ _id })) _id = `${nanoid(3)}/${nanoid()}${extname(dst)}`; + while (await StorageModel.coll.findOne({ _id })) _id = StorageModel.generateId(extname(dst)); const result = await storage.copy(value._id, dst); const { metaData, size, etag } = await storage.getMeta(_id); await StorageModel.coll.insertOne({