Skip to content

Commit

Permalink
feat: optional file size limit on standard upload
Browse files Browse the repository at this point in the history
  • Loading branch information
fenos committed Jan 3, 2024
1 parent 1438574 commit 822cb32
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
4 changes: 4 additions & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type StorageConfigType = {
anonKey: string
encryptionKey: string
fileSizeLimit: number
fileSizeLimitStandardUpload?: number
fileStoragePath?: string
globalS3Protocol: 'http' | 'https'
globalS3MaxSockets?: number
Expand Down Expand Up @@ -109,6 +110,9 @@ export function getConfig(): StorageConfigType {
anonKey: getOptionalIfMultitenantConfigFromEnv('ANON_KEY') || '',
encryptionKey: getOptionalConfigFromEnv('ENCRYPTION_KEY') || '',
fileSizeLimit: Number(getConfigFromEnv('FILE_SIZE_LIMIT')),
fileSizeLimitStandardUpload: parseInt(
getOptionalConfigFromEnv('FILE_SIZE_LIMIT_STANDARD_UPLOAD') || '0'
),
fileStoragePath: getOptionalConfigFromEnv('FILE_STORAGE_BACKEND_PATH'),
globalS3MaxSockets: parseInt(getOptionalConfigFromEnv('GLOBAL_S3_MAX_SOCKETS') || '200', 10),
globalS3Protocol: (getOptionalConfigFromEnv('GLOBAL_S3_PROTOCOL') || 'https') as
Expand Down
24 changes: 16 additions & 8 deletions src/storage/uploader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ interface UploaderOptions extends UploadObjectOptions {
allowedMimeTypes?: string[] | null
}

const { globalS3Bucket } = getConfig()
const { globalS3Bucket, fileSizeLimitStandardUpload } = getConfig()

export interface UploadObjectOptions {
bucketId: string
Expand Down Expand Up @@ -247,13 +247,7 @@ export class Uploader {
options?: Pick<UploaderOptions, 'fileSizeLimit'>
) {
const contentType = request.headers['content-type']
let fileSizeLimit = await getFileSizeLimit(request.tenantId)

if (typeof options?.fileSizeLimit === 'number') {
if (options.fileSizeLimit <= fileSizeLimit) {
fileSizeLimit = options.fileSizeLimit
}
}
const fileSizeLimit = await this.getFileSizeLimit(request.tenantId, options?.fileSizeLimit)

let body: NodeJS.ReadableStream
let mimeType: string
Expand Down Expand Up @@ -297,4 +291,18 @@ export class Uploader {
isTruncated,
}
}

protected async getFileSizeLimit(tenantId: string, bucketSizeLimit?: number | null) {
let globalFileSizeLimit = await getFileSizeLimit(tenantId)

if (typeof bucketSizeLimit === 'number') {
globalFileSizeLimit = Math.min(bucketSizeLimit, globalFileSizeLimit)
}

if (fileSizeLimitStandardUpload && fileSizeLimitStandardUpload > 0) {
globalFileSizeLimit = Math.min(fileSizeLimitStandardUpload, globalFileSizeLimit)
}

return globalFileSizeLimit
}
}

0 comments on commit 822cb32

Please sign in to comment.