diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index 72e120ccb..cd9c6631d 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -106,7 +106,7 @@ export class StorageModel { // Make sure id is not used // eslint-disable-next-line no-await-in-loop while (await StorageModel.coll.findOne({ _id })) _id = StorageModel.generateId(extname(dst)); - const result = await storage.copy(value._id, dst); + const result = await storage.copy(value._id, _id); const { metaData, size, etag } = await storage.getMeta(_id); await StorageModel.coll.insertOne({ _id, meta: metaData, path: dst, size, etag, lastModified: new Date(), owner: value.owner || 1, diff --git a/packages/hydrooj/src/service/storage.ts b/packages/hydrooj/src/service/storage.ts index a57fc6eba..fdb15a668 100644 --- a/packages/hydrooj/src/service/storage.ts +++ b/packages/hydrooj/src/service/storage.ts @@ -335,6 +335,7 @@ class LocalStorageService { async copy(src: string, target: string) { src = resolve(this.dir, convertPath(src)); target = resolve(this.dir, convertPath(target)); + await ensureDir(dirname(target)); await copyFile(src, target); return { etag: target, lastModified: new Date() }; }