Skip to content

Commit 01c8a7e

Browse files
authored
feat: optional file size limit on standard upload (#408)
1 parent 1c24c36 commit 01c8a7e

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type StorageConfigType = {
1111
anonKey: string
1212
encryptionKey: string
1313
fileSizeLimit: number
14+
fileSizeLimitStandardUpload?: number
1415
fileStoragePath?: string
1516
globalS3Protocol: 'http' | 'https'
1617
globalS3MaxSockets?: number
@@ -109,6 +110,9 @@ export function getConfig(): StorageConfigType {
109110
anonKey: getOptionalIfMultitenantConfigFromEnv('ANON_KEY') || '',
110111
encryptionKey: getOptionalConfigFromEnv('ENCRYPTION_KEY') || '',
111112
fileSizeLimit: Number(getConfigFromEnv('FILE_SIZE_LIMIT')),
113+
fileSizeLimitStandardUpload: parseInt(
114+
getOptionalConfigFromEnv('FILE_SIZE_LIMIT_STANDARD_UPLOAD') || '0'
115+
),
112116
fileStoragePath: getOptionalConfigFromEnv('FILE_STORAGE_BACKEND_PATH'),
113117
globalS3MaxSockets: parseInt(getOptionalConfigFromEnv('GLOBAL_S3_MAX_SOCKETS') || '200', 10),
114118
globalS3Protocol: (getOptionalConfigFromEnv('GLOBAL_S3_PROTOCOL') || 'https') as

src/storage/uploader.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ interface UploaderOptions extends UploadObjectOptions {
1313
allowedMimeTypes?: string[] | null
1414
}
1515

16-
const { globalS3Bucket } = getConfig()
16+
const { globalS3Bucket, fileSizeLimitStandardUpload } = getConfig()
1717

1818
export interface UploadObjectOptions {
1919
bucketId: string
@@ -247,13 +247,7 @@ export class Uploader {
247247
options?: Pick<UploaderOptions, 'fileSizeLimit'>
248248
) {
249249
const contentType = request.headers['content-type']
250-
let fileSizeLimit = await getFileSizeLimit(request.tenantId)
251-
252-
if (typeof options?.fileSizeLimit === 'number') {
253-
if (options.fileSizeLimit <= fileSizeLimit) {
254-
fileSizeLimit = options.fileSizeLimit
255-
}
256-
}
250+
const fileSizeLimit = await this.getFileSizeLimit(request.tenantId, options?.fileSizeLimit)
257251

258252
let body: NodeJS.ReadableStream
259253
let mimeType: string
@@ -297,4 +291,18 @@ export class Uploader {
297291
isTruncated,
298292
}
299293
}
294+
295+
protected async getFileSizeLimit(tenantId: string, bucketSizeLimit?: number | null) {
296+
let globalFileSizeLimit = await getFileSizeLimit(tenantId)
297+
298+
if (typeof bucketSizeLimit === 'number') {
299+
globalFileSizeLimit = Math.min(bucketSizeLimit, globalFileSizeLimit)
300+
}
301+
302+
if (fileSizeLimitStandardUpload && fileSizeLimitStandardUpload > 0) {
303+
globalFileSizeLimit = Math.min(fileSizeLimitStandardUpload, globalFileSizeLimit)
304+
}
305+
306+
return globalFileSizeLimit
307+
}
300308
}

0 commit comments

Comments
 (0)