diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 72983468d..564beec59 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "4.2.4", + "version": "4.2.5", "bin": "bin/hydrooj.js", "main": "src/plugin-api", "module": "src/plugin-api", diff --git a/packages/hydrooj/src/service/storage.ts b/packages/hydrooj/src/service/storage.ts index 6414b2113..076ba731f 100644 --- a/packages/hydrooj/src/service/storage.ts +++ b/packages/hydrooj/src/service/storage.ts @@ -3,7 +3,7 @@ import { PassThrough, Readable } from 'stream'; import { URL } from 'url'; import { CopyObjectCommand, DeleteObjectCommand, DeleteObjectsCommand, - GetObjectCommand, HeadObjectCommand, PutObjectCommand, S3Client, + GetObjectCommand, HeadObjectCommand, PutObjectCommand, PutObjectCommandInput, S3Client, } from '@aws-sdk/client-s3'; import { Upload } from '@aws-sdk/lib-storage'; import { createPresignedPost } from '@aws-sdk/s3-presigned-post'; @@ -115,17 +115,19 @@ class RemoteStorageService { async put(target: string, file: string | Buffer | Readable, meta: Record = {}) { if (target.includes('..') || target.includes('//')) throw new Error('Invalid path'); if (typeof file === 'string') file = createReadStream(file); + const params: PutObjectCommandInput = { + Bucket: this.opts.bucket, + Key: target, + Body: file, + Metadata: meta, + ContentType: meta['Content-Type'] || 'application/octet-stream', + }; if (file instanceof Buffer && file.byteLength <= 5 * 1024 * 1024) { - await this.client.send(new PutObjectCommand({ - Bucket: this.opts.bucket, - Body: file, - Key: target, - Metadata: meta, - })); + await this.client.send(new PutObjectCommand(params)); } else { const upload = new Upload({ client: this.client, - params: { Bucket: this.opts.bucket, Key: target, Body: file }, + params, tags: [], queueSize: 4, partSize: 1024 * 1024 * 5,