Merge pull request #1138 from transloadit/improvement/xhr-upload-bundle-resp

Set response in Core rather than in upload plugins
This commit is contained in:
Artur Paikin 2019-01-31 17:19:26 +03:00 committed by GitHub
commit 498f47ab05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 73 additions and 26 deletions

View file

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

View file

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

View file

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

View file

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

View file

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