Merge pull request #2139 from transloadit/send-back-download-error

companion: emit error to client if download fails
This commit is contained in:
Ifedapo .A. Olarewaju 2020-03-16 16:32:41 +01:00 committed by GitHub
commit fdd7efc9fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 37 additions and 17 deletions

View file

@ -204,13 +204,21 @@ class Uploader {
/**
*
* @param {Buffer | Buffer[]} chunk
* @param {Error} err
* @param {string | Buffer | Buffer[]} chunk
*/
handleChunk (chunk) {
handleChunk (err, chunk) {
if (this.uploadStopped) {
return
}
if (err) {
logger.error(err, 'uploader.download.error', this.shortToken)
this.emitError(err)
this.cleanUp()
return
}
// @todo a default protocol should not be set. We should ensure that the user specifies her protocol.
const protocol = this.options.protocol || PROTOCOLS.multipart

View file

@ -94,12 +94,18 @@ const validateURL = (url, debug) => {
return true
}
/**
* @callback downloadCallback
* @param {Error} err
* @param {string | Buffer | Buffer[]} chunk
*/
/**
* Downloads the content in the specified url, and passes the data
* to the callback chunk by chunk.
*
* @param {string} url
* @param {typeof Function} onDataChunk
* @param {downloadCallback} onDataChunk
* @param {boolean} blockLocalIPs
* @param {string=} traceId
*/
@ -112,7 +118,7 @@ const downloadURL = (url, onDataChunk, blockLocalIPs, traceId) => {
}
request(opts)
.on('data', onDataChunk)
.on('end', () => onDataChunk(null))
.on('data', (chunk) => onDataChunk(null, chunk))
.on('end', () => onDataChunk(null, null))
.on('error', (err) => logger.error(err, 'controller.url.download.error', traceId))
}

View file

@ -109,10 +109,11 @@ class Drive extends Provider {
.qs({ alt: 'media', supportsAllDrives: true })
.auth(token)
.request()
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.drive.download.error')
onData(err)
})
}

View file

@ -121,10 +121,11 @@ class DropBox extends Provider {
})
.auth(token)
.request()
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.dropbox.download.error')
onData(err)
})
}

View file

@ -82,10 +82,11 @@ class Facebook extends Provider {
.request((err, resp, body) => {
if (err) return logger.error(err, 'provider.facebook.download.error')
request(this._getMediaUrl(body))
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.facebook.download.url.error')
onData(err)
})
})
}

View file

@ -78,10 +78,11 @@ class Instagram extends Provider {
.request((err, resp, body) => {
if (err) return logger.error(err, 'provider.instagram.download.error')
request(body.media_url)
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.instagram.download.url.error')
onData(err)
})
})
}

View file

@ -79,10 +79,11 @@ class Instagram extends Provider {
.request((err, resp, body) => {
if (err) return logger.error(err, 'provider.instagram.download.error')
request(this._getMediaUrl(body, query.carousel_id))
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.instagram.download.url.error')
onData(err)
})
})
}

View file

@ -70,10 +70,11 @@ class OneDrive extends Provider {
.get(`${rootPath}/items/${id}/content`)
.auth(token)
.request()
.on('data', onData)
.on('end', () => onData(null))
.on('data', (chunk) => onData(null, chunk))
.on('end', () => onData(null, null))
.on('error', (err) => {
logger.error(err, 'provider.onedrive.download.error')
onData(err)
})
}