소스 검색

companion: emit error to client if download fails

ifedapoolarewaju 5 년 전
부모
커밋
fdc065fe51

+ 10 - 2
packages/@uppy/companion/src/server/Uploader.js

@@ -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
 

+ 9 - 3
packages/@uppy/companion/src/server/controllers/url.js

@@ -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))
 }

+ 3 - 2
packages/@uppy/companion/src/server/provider/drive/index.js

@@ -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)
       })
   }
 

+ 3 - 2
packages/@uppy/companion/src/server/provider/dropbox/index.js

@@ -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)
       })
   }
 

+ 3 - 2
packages/@uppy/companion/src/server/provider/facebook/index.js

@@ -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)
           })
       })
   }

+ 3 - 2
packages/@uppy/companion/src/server/provider/instagram/graph/index.js

@@ -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)
           })
       })
   }

+ 3 - 2
packages/@uppy/companion/src/server/provider/instagram/index.js

@@ -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)
           })
       })
   }

+ 3 - 2
packages/@uppy/companion/src/server/provider/onedrive/index.js

@@ -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)
       })
   }