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