diff --git a/packages/@uppy/companion/KUBERNETES.md b/packages/@uppy/companion/KUBERNETES.md index b9c908bb3a..5b148a4780 100644 --- a/packages/@uppy/companion/KUBERNETES.md +++ b/packages/@uppy/companion/KUBERNETES.md @@ -28,6 +28,7 @@ data: COMPANION_DOMAINS: 'sub1.domain.com,sub2.domain.com,sub3.domain.com' COMPANION_PROTOCOL: 'YOUR SERVER PROTOCOL' COMPANION_STREAMING_UPLOAD: true + COMPANION_TUS_DEFERRED_UPLOAD_LENGTH: true COMPANION_REDIS_URL: redis://:superSecretPassword@uppy-redis.uppy.svc.cluster.local:6379 COMPANION_SECRET: 'shh!Issa Secret!' COMPANION_PREAUTH_SECRET: 'another secret' diff --git a/packages/@uppy/companion/env_example b/packages/@uppy/companion/env_example index 08b3e0acf1..b166facda9 100644 --- a/packages/@uppy/companion/env_example +++ b/packages/@uppy/companion/env_example @@ -5,6 +5,7 @@ COMPANION_SELF_ENDPOINT=uppy.xxxx.com COMPANION_HIDE_METRICS=false COMPANION_HIDE_WELCOME=false COMPANION_STREAMING_UPLOAD=true +COMPANION_TUS_DEFERRED_UPLOAD_LENGTH=true COMPANION_PROTOCOL=https COMPANION_DATADIR=/mnt/uppy-server-data diff --git a/packages/@uppy/companion/src/server/Uploader.js b/packages/@uppy/companion/src/server/Uploader.js index 9c2e3dd64b..9f8014549d 100644 --- a/packages/@uppy/companion/src/server/Uploader.js +++ b/packages/@uppy/companion/src/server/Uploader.js @@ -509,9 +509,7 @@ class Uploader { const tusOptions = { endpoint: this.options.endpoint, uploadUrl: this.options.uploadUrl, - uploadLengthDeferred: !isFileStream, retryDelays: [0, 1000, 3000, 5000], - uploadSize: isFileStream ? this.size : undefined, chunkSize, headers: headerSanitize(this.options.headers), addRequestId: true, @@ -553,6 +551,16 @@ class Uploader { }, } + if (this.options.companionOptions.tusDeferredUploadLength && !isFileStream) { + tusOptions.uploadLengthDeferred = true + } else { + if (!this.size) { + reject(new Error('tusDeferredUploadLength needs to be enabled if no file size is provided by the provider')) + } + tusOptions.uploadLengthDeferred = false + tusOptions.uploadSize = this.size + } + this.tus = new tus.Upload(stream, tusOptions) this.tus.start() diff --git a/packages/@uppy/companion/src/standalone/helper.js b/packages/@uppy/companion/src/standalone/helper.js index 57494dadb8..4db99e03e7 100644 --- a/packages/@uppy/companion/src/standalone/helper.js +++ b/packages/@uppy/companion/src/standalone/helper.js @@ -183,6 +183,7 @@ const getConfigFromEnv = () => { // cookieDomain is kind of a hack to support distributed systems. This should be improved but we never got so far. cookieDomain: process.env.COMPANION_COOKIE_DOMAIN, streamingUpload: process.env.COMPANION_STREAMING_UPLOAD ? process.env.COMPANION_STREAMING_UPLOAD === 'true' : undefined, + tusDeferredUploadLength: process.env.COMPANION_TUS_DEFERRED_UPLOAD_LENGTH ? process.env.COMPANION_TUS_DEFERRED_UPLOAD_LENGTH === 'true' : true, maxFileSize: process.env.COMPANION_MAX_FILE_SIZE ? parseInt(process.env.COMPANION_MAX_FILE_SIZE, 10) : undefined, chunkSize: process.env.COMPANION_CHUNK_SIZE ? parseInt(process.env.COMPANION_CHUNK_SIZE, 10) : undefined, clientSocketConnectTimeout: process.env.COMPANION_CLIENT_SOCKET_CONNECT_TIMEOUT diff --git a/packages/@uppy/companion/test/mockserver.js b/packages/@uppy/companion/test/mockserver.js index 9ee1779e96..329e4d2d2f 100644 --- a/packages/@uppy/companion/test/mockserver.js +++ b/packages/@uppy/companion/test/mockserver.js @@ -12,6 +12,7 @@ const defaultEnv = { COMPANION_HIDE_WELCOME: 'false', COMPANION_STREAMING_UPLOAD: 'true', + COMPANION_TUS_DEFERRED_UPLOAD_LENGTH: 'true', COMPANION_ALLOW_LOCAL_URLS: 'false', COMPANION_PROTOCOL: 'http',