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 a7517b9f5..1187de936 100644 --- a/packages/@uppy/core/src/index.js +++ b/packages/@uppy/core/src/index.js @@ -695,8 +695,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 }) @@ -734,7 +738,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, { @@ -742,7 +746,8 @@ class Uppy { percentage: 100, bytesUploaded: currentProgress.bytesTotal }), - uploadURL: uploadURL, + response: uploadResp, + uploadURL: uploadResp.uploadURL, isPaused: false }) diff --git a/packages/@uppy/tus/src/index.js b/packages/@uppy/tus/src/index.js index b3e59f92e..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, upload, 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, data, 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 7236a7b7a..5816f6e60 100644 --- a/packages/@uppy/xhr-upload/src/index.js +++ b/packages/@uppy/xhr-upload/src/index.js @@ -232,15 +232,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, body, uploadURL) + this.uppy.emit('upload-success', file, uploadResp) if (uploadURL) { this.uppy.log(`Download ${file.name} from ${file.uploadURL}`) @@ -256,9 +254,7 @@ module.exports = class XHRUpload extends Plugin { body } - this.uppy.setFileState(file.id, { response }) - - this.uppy.emit('upload-error', file, error) + this.uppy.emit('upload-error', file, error, response) return reject(error) } }) @@ -332,9 +328,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 uploadResp = { + status: data.response.status, + body, + uploadURL + } + + this.uppy.emit('upload-success', file, uploadResp) socket.close() return resolve() }) @@ -399,9 +402,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() } diff --git a/website/src/docs/uppy.md b/website/src/docs/uppy.md index 00fdf9975..e649f935d 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) })