From 409b11b7b6dd14176c5de95dbf550fe7e0f418f9 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Tue, 6 Nov 2018 16:23:04 +0300 Subject: [PATCH 1/4] Set response in Core rather than in upload plugins --- packages/@uppy/core/src/index.js | 1 + packages/@uppy/tus/src/index.js | 4 ++-- packages/@uppy/xhr-upload/src/index.js | 21 ++++++++++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/packages/@uppy/core/src/index.js b/packages/@uppy/core/src/index.js index 6c3523ba7..246cc8531 100644 --- a/packages/@uppy/core/src/index.js +++ b/packages/@uppy/core/src/index.js @@ -713,6 +713,7 @@ class Uppy { percentage: 100, bytesUploaded: currentProgress.bytesTotal }), + response: uploadResp, uploadURL: uploadURL, isPaused: false }) diff --git a/packages/@uppy/tus/src/index.js b/packages/@uppy/tus/src/index.js index b3e59f92e..bd609bba8 100644 --- a/packages/@uppy/tus/src/index.js +++ b/packages/@uppy/tus/src/index.js @@ -154,7 +154,7 @@ module.exports = class Tus extends Plugin { } optsTus.onSuccess = () => { - this.uppy.emit('upload-success', file, upload, upload.url) + this.uppy.emit('upload-success', file, null, upload.url) if (upload.url) { this.uppy.log('Download ' + upload.file.name + ' from ' + upload.url) @@ -327,7 +327,7 @@ module.exports = class Tus extends Plugin { }) socket.on('success', (data) => { - this.uppy.emit('upload-success', file, data, data.url) + this.uppy.emit('upload-success', file, null, data.url) this.resetUploaderReferences(file.id) resolve() }) diff --git a/packages/@uppy/xhr-upload/src/index.js b/packages/@uppy/xhr-upload/src/index.js index 8f51aa37d..a5388f99e 100644 --- a/packages/@uppy/xhr-upload/src/index.js +++ b/packages/@uppy/xhr-upload/src/index.js @@ -236,9 +236,9 @@ module.exports = class XHRUpload extends Plugin { uploadURL } - this.uppy.setFileState(file.id, { response }) + // this.uppy.setFileState(file.id, { response }) - this.uppy.emit('upload-success', file, body, uploadURL) + this.uppy.emit('upload-success', file, response) if (uploadURL) { this.uppy.log(`Download ${file.name} from ${file.uploadURL}`) @@ -254,9 +254,9 @@ module.exports = class XHRUpload extends Plugin { body } - this.uppy.setFileState(file.id, { response }) + // this.uppy.setFileState(file.id, { response }) - this.uppy.emit('upload-error', file, error) + this.uppy.emit('upload-error', file, response, error) return reject(error) } }) @@ -326,9 +326,16 @@ module.exports = class XHRUpload extends Plugin { socket.on('progress', (progressData) => emitSocketProgress(this, progressData, file)) socket.on('success', (data) => { - const resp = opts.getResponseData(data.response.responseText, data.response) - const uploadURL = resp[opts.responseUrlFieldName] - this.uppy.emit('upload-success', file, resp, uploadURL) + const body = opts.getResponseData(data.response.responseText, data.response) + const uploadURL = body[opts.responseUrlFieldName] + + const response = { + status: data.response.status, + body, + uploadURL + } + + this.uppy.emit('upload-success', file, response) socket.close() return resolve() }) From f1f21b1132e140eb6ab6d3b6547fffe557ca8953 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Wed, 19 Dec 2018 23:16:48 +0300 Subject: [PATCH 2/4] change all upload-success events to emit (file, uploadResp) with uploadResp {status, body, uploadURL}, upload-error to (file, error) --- packages/@uppy/aws-s3-multipart/src/index.js | 12 ++++++-- packages/@uppy/core/src/index.js | 4 +-- packages/@uppy/tus/src/index.js | 12 ++++++-- packages/@uppy/xhr-upload/src/index.js | 29 ++++++++------------ 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/src/index.js b/packages/@uppy/aws-s3-multipart/src/index.js index b4bc2e149..b60fbb104 100644 --- a/packages/@uppy/aws-s3-multipart/src/index.js +++ b/packages/@uppy/aws-s3-multipart/src/index.js @@ -171,7 +171,11 @@ module.exports = class AwsS3Multipart extends Plugin { reject(err) }, onSuccess: (result) => { - this.uppy.emit('upload-success', file, upload, result.location) + const uploadResp = { + uploadURL: result.location + } + + this.uppy.emit('upload-success', file, uploadResp) if (result.location) { this.uppy.log('Download ' + upload.file.name + ' from ' + result.location) @@ -328,7 +332,11 @@ module.exports = class AwsS3Multipart extends Plugin { }) socket.on('success', (data) => { - this.uppy.emit('upload-success', file, data, data.url) + const uploadResp = { + uploadURL: data.url + } + + this.uppy.emit('upload-success', file, uploadResp) resolve() }) }) diff --git a/packages/@uppy/core/src/index.js b/packages/@uppy/core/src/index.js index 246cc8531..9c98407b0 100644 --- a/packages/@uppy/core/src/index.js +++ b/packages/@uppy/core/src/index.js @@ -705,7 +705,7 @@ class Uppy { this.on('upload-progress', this._calculateProgress) - this.on('upload-success', (file, uploadResp, uploadURL) => { + this.on('upload-success', (file, uploadResp) => { const currentProgress = this.getFile(file.id).progress this.setFileState(file.id, { progress: Object.assign({}, currentProgress, { @@ -714,7 +714,7 @@ class Uppy { bytesUploaded: currentProgress.bytesTotal }), response: uploadResp, - uploadURL: uploadURL, + uploadURL: uploadResp.uploadURL, isPaused: false }) diff --git a/packages/@uppy/tus/src/index.js b/packages/@uppy/tus/src/index.js index bd609bba8..969342ad8 100644 --- a/packages/@uppy/tus/src/index.js +++ b/packages/@uppy/tus/src/index.js @@ -154,7 +154,11 @@ module.exports = class Tus extends Plugin { } optsTus.onSuccess = () => { - this.uppy.emit('upload-success', file, null, upload.url) + const uploadResp = { + uploadURL: upload.url + } + + this.uppy.emit('upload-success', file, uploadResp) if (upload.url) { this.uppy.log('Download ' + upload.file.name + ' from ' + upload.url) @@ -327,7 +331,11 @@ module.exports = class Tus extends Plugin { }) socket.on('success', (data) => { - this.uppy.emit('upload-success', file, null, data.url) + const uploadResp = { + uploadURL: data.url + } + + this.uppy.emit('upload-success', file, uploadResp) this.resetUploaderReferences(file.id) resolve() }) diff --git a/packages/@uppy/xhr-upload/src/index.js b/packages/@uppy/xhr-upload/src/index.js index a5388f99e..f492a73de 100644 --- a/packages/@uppy/xhr-upload/src/index.js +++ b/packages/@uppy/xhr-upload/src/index.js @@ -230,15 +230,13 @@ module.exports = class XHRUpload extends Plugin { const body = opts.getResponseData(xhr.responseText, xhr) const uploadURL = body[opts.responseUrlFieldName] - const response = { + const uploadResp = { status: ev.target.status, body, uploadURL } - // this.uppy.setFileState(file.id, { response }) - - this.uppy.emit('upload-success', file, response) + this.uppy.emit('upload-success', file, uploadResp) if (uploadURL) { this.uppy.log(`Download ${file.name} from ${file.uploadURL}`) @@ -246,17 +244,10 @@ module.exports = class XHRUpload extends Plugin { return resolve(file) } else { - const body = opts.getResponseData(xhr.responseText, xhr) + // const body = opts.getResponseData(xhr.responseText, xhr) const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr)) - const response = { - status: ev.target.status, - body - } - - // this.uppy.setFileState(file.id, { response }) - - this.uppy.emit('upload-error', file, response, error) + this.uppy.emit('upload-error', file, error) return reject(error) } }) @@ -329,13 +320,13 @@ module.exports = class XHRUpload extends Plugin { const body = opts.getResponseData(data.response.responseText, data.response) const uploadURL = body[opts.responseUrlFieldName] - const response = { + const uploadResp = { status: data.response.status, body, uploadURL } - this.uppy.emit('upload-success', file, response) + this.uppy.emit('upload-success', file, uploadResp) socket.close() return resolve() }) @@ -402,9 +393,13 @@ module.exports = class XHRUpload extends Plugin { timer.done() if (ev.target.status >= 200 && ev.target.status < 300) { - const resp = this.opts.getResponseData(xhr.responseText, xhr) + const body = this.opts.getResponseData(xhr.responseText, xhr) + const uploadResp = { + status: ev.target.status, + body + } files.forEach((file) => { - this.uppy.emit('upload-success', file, resp) + this.uppy.emit('upload-success', file, uploadResp) }) return resolve() } From 8ce263c9e351b2727a7c79c246d4fdc2ef0c9801 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Sat, 19 Jan 2019 15:34:17 +0300 Subject: [PATCH 3/4] Emit response in `upload-error` and set it to file object in Core, like we do with `upload-success` --- packages/@uppy/core/src/index.js | 8 ++++++-- packages/@uppy/xhr-upload/src/index.js | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/@uppy/core/src/index.js b/packages/@uppy/core/src/index.js index 9c98407b0..f26fce7bb 100644 --- a/packages/@uppy/core/src/index.js +++ b/packages/@uppy/core/src/index.js @@ -666,8 +666,12 @@ class Uppy { this.setState({ error: error.message }) }) - this.on('upload-error', (file, error) => { - this.setFileState(file.id, { error: error.message }) + this.on('upload-error', (file, error, response) => { + this.setFileState(file.id, { + error: error.message, + response + }) + this.setState({ error: error.message }) let message = this.i18n('failedToUpload', { file: file.name }) diff --git a/packages/@uppy/xhr-upload/src/index.js b/packages/@uppy/xhr-upload/src/index.js index f492a73de..eff6c2592 100644 --- a/packages/@uppy/xhr-upload/src/index.js +++ b/packages/@uppy/xhr-upload/src/index.js @@ -244,10 +244,15 @@ module.exports = class XHRUpload extends Plugin { return resolve(file) } else { - // const body = opts.getResponseData(xhr.responseText, xhr) + const body = opts.getResponseData(xhr.responseText, xhr) const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr)) - this.uppy.emit('upload-error', file, error) + const response = { + status: ev.target.status, + body + } + + this.uppy.emit('upload-error', file, error, response) return reject(error) } }) From c1ddca836e8fee3a81c2f9f7dc70eba36edcfe1a Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Wed, 30 Jan 2019 20:10:37 +0300 Subject: [PATCH 4/4] talk about response in upload-success and upload-error --- website/src/docs/uppy.md | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/website/src/docs/uppy.md b/website/src/docs/uppy.md index c70e3af4d..0180d2322 100644 --- a/website/src/docs/uppy.md +++ b/website/src/docs/uppy.md @@ -549,13 +549,23 @@ uppy.on('upload-progress', (file, progress) => { Fired each time a single upload is completed. +`response` object (depending on the uploader plugin used, it might contain less info, the example is for `@uppy/xhr-upload`): + +```js +{ + status, // HTTP status code (0, 200, 300) + body, // response body + uploadURL // the file url, if it was returned +} +``` + ``` javascript -uppy.on('upload-success', (file, resp, uploadURL) => { - console.log(file.name, uploadURL) +uppy.on('upload-success', (file, response) => { + console.log(file.name, response.uploadURL) var img = new Image() img.width = 300 - img.alt = fileId - img.src = uploadURL + img.alt = file.id + img.src = response.uploadURL document.body.appendChild(img) }) ``` @@ -579,10 +589,19 @@ Fired when Uppy fails to upload/encode the entire upload. That error is then set ### `upload-error` -Fired when an error occurs with a specific file: +Fired each time a single upload has errored. + +`response` object (depending on the uploader plugin used, it might contain less info, the example is for `@uppy/xhr-upload`): + +```js +{ + status, // HTTP status code (0, 200, 300) + body // response body +} +``` ``` javascript -uppy.on('upload-error', (file, error) => { +uppy.on('upload-error', (file, error, response) => { console.log('error with file:', file.id) console.log('error message:', error) })