From c5c9139db2b6ad6a65f53b34098bd6a402d27e46 Mon Sep 17 00:00:00 2001 From: EvaPeng Date: Sun, 20 Dec 2020 15:07:11 +0800 Subject: [PATCH] single file upload --- frontend/src/api/files.js | 25 ++++++++++++++++++------- frontend/src/store/getters.js | 3 --- frontend/src/store/modules/upload.js | 2 -- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/frontend/src/api/files.js b/frontend/src/api/files.js index 2c16eec3..960ca98e 100644 --- a/frontend/src/api/files.js +++ b/frontend/src/api/files.js @@ -3,7 +3,6 @@ import { md5Generate } from '../../src/utils/md5' import { baseURL } from '@/utils/constants' import store from '@/store' -/* eslint-disable no-debugger */ export async function fetch(url) { url = removePrefix(url) @@ -92,14 +91,24 @@ export async function post(url, content = '', overwrite = false, onupload) { bufferContent = await new Response(content).arrayBuffer() } - let partialUpload = function partialUpload(url, params, content) { + let partialUpload = function partialUpload(url, paramsObj, content) { + if (typeof paramsObj !== "object") { + paramsObj = {}; + } + let params = '&' + Object.keys(paramsObj).map(key => key + '=' + paramsObj[key]).join('&'); + let warpOnUpload = function (event) { + let chunckedLoaded = event.loaded + (paramsObj.chunckIndex - 1) * paramsObj.chunkSize; + let obj = { + loaded: chunckedLoaded + } + return onupload(obj); + } return new Promise((resolve, reject) => { - debugger; let request = new XMLHttpRequest() request.open('POST', `${baseURL}/api/resources${url}?override=${overwrite}${params}`, true) request.setRequestHeader('X-Auth', store.state.jwt) if (typeof onupload === 'function') { - request.upload.onprogress = onupload + request.upload.onprogress = warpOnUpload } request.onload = () => { @@ -122,7 +131,7 @@ export async function post(url, content = '', overwrite = false, onupload) { if (!content) { //create folder or create new file - await partialUpload(url, "", content) + await partialUpload(url, {}, content) return; } @@ -147,8 +156,10 @@ export async function post(url, content = '', overwrite = false, onupload) { } fileContent = blobSlice.call(allContent, startIndex, endInex); - debugger; - let params = `&fileID=${fileID}&chunckIndex=${index + 1}&totalChunck=${totalChunks}` + let params = { + fileID: fileID, chunckIndex: index + 1, totalChunck: totalChunks, chunkSize: chunkSize + } + await partialUpload(url, params, fileContent).then(() => { tryCount = 0; }).catch(err => { diff --git a/frontend/src/store/getters.js b/frontend/src/store/getters.js index f1b27ff8..b7607199 100644 --- a/frontend/src/store/getters.js +++ b/frontend/src/store/getters.js @@ -6,12 +6,9 @@ const getters = { isPreview: state => state.previewMode, selectedCount: state => state.selected.length, progress : state => { - /* eslint-disable no-debugger */ - if (state.upload.progress.length == 0) { return 0; } - debugger; let sum = state.upload.progress.reduce((acc, val) => acc + val) return Math.ceil(sum / state.upload.size * 100); } diff --git a/frontend/src/store/modules/upload.js b/frontend/src/store/modules/upload.js index 57a6816c..53307076 100644 --- a/frontend/src/store/modules/upload.js +++ b/frontend/src/store/modules/upload.js @@ -12,10 +12,8 @@ const state = { queue: [], uploads: {} } -/* eslint-disable no-debugger */ const mutations = { setProgress(state, { id, loaded }) { - debugger; Vue.set(state.progress, id, loaded) }, reset: (state) => {