uppy/src/plugins/Multipart.js
2016-01-24 10:18:48 +01:00

74 lines
1.6 KiB
JavaScript

import Plugin from './Plugin'
export default class Multipart extends Plugin {
constructor (core, opts) {
super(core, opts)
this.type = 'uploader'
if (!this.opts.fieldName === undefined) {
this.opts.fieldName = 'files[]'
}
if (this.opts.bundle === undefined) {
this.opts.bundle = true
}
}
run (results) {
console.log({
class: 'Multipart',
method: 'run',
results: results
})
const files = this.extractFiles(results)
this.setProgress(0)
var uploaders = []
if (this.opts.bundle) {
uploaders.push(this.upload(files, 0, files.length))
} else {
for (let i in files) {
uploaders.push(this.upload(files, i, files.length))
}
}
return Promise.all(uploaders)
}
upload (files, current, total) {
var formPost = new FormData()
// turn file into an array so we can use bundle
if (!this.opts.bundle) {
files = [files[current]]
}
for (let i in files) {
formPost.append(this.opts.fieldName, files[i])
}
var xhr = new XMLHttpRequest()
xhr.open('POST', this.opts.endpoint, true)
xhr.addEventListener('progress', (e) => {
var percentage = (e.loaded / e.total * 100).toFixed(2)
this.setProgress(percentage, current, total)
})
xhr.addEventListener('load', () => {
var upload = {}
if (this.opts.bundle) {
upload = {files: files}
} else {
upload = {file: files[current]}
}
return Promise.resolve(upload)
})
xhr.addEventListener('error', () => {
return Promise.reject('fucking error!')
})
xhr.send(formPost)
}
}