Browse Source

add status and progress

tags/v1.21.12.1
yuyuanshifu 5 years ago
parent
commit
14d1d82085
1 changed files with 38 additions and 75 deletions
  1. +38
    -75
      web_src/js/App.vue

+ 38
- 75
web_src/js/App.vue View File

@@ -4,9 +4,7 @@
:options="options"
:autoStart="false"
@file-added="onFileAdded"
@file-success="onFileSuccess"
@file-progress="onFileProgress"
@file-error="onFileError"
fileStatusText="fileStatusText"
class="uploader-app">
<uploader-unsupport></uploader-unsupport>
<uploader-drop>
@@ -14,6 +12,8 @@
<uploader-btn>选择文件</uploader-btn>
</uploader-drop>
<uploader-list></uploader-list>
<p>文件处理状态:{{status}}</p>
<p>文件上传进度:{{progress}}%</p>
</uploader>
</template>

@@ -31,10 +31,7 @@
attrs: {
accept: '*'
},
props: ["datasetId"],
panelShow: false, //选择文件后,展示上传panel
collapse: false,
statusTextMap: {
fileStatusText: {
success: '上传成功',
error: '上传出错了',
uploading: '上传中...',
@@ -43,16 +40,25 @@
cmd5: '计算md5...'
},
fileStatusText: (status, response) => {
return this.statusTextMap[status];
return this.fileStatusText[status];
},
progress: 0,
status: '初始状态',
}
},
created() {
//const uploaderInstance = this.$refs.uploader;
},
mounted () {
this.$nextTick(() => {
window.uploader = this.$refs.uploader.uploader
})
},
methods: {
onFileAdded(file) {
file.datasetId = document.getElementById("datasetId").getAttribute("datasetId");
this.progress=0;
this.status='初始状态';
// 计算MD5
this.computeMD5(file);
},
@@ -207,7 +213,20 @@
})
}

function upload() {
var successChunks = new Array();
var successParts = new Array();
successParts = file.chunks.split(",");
for (let i = 0; i < successParts.length; i++) {
successChunks[i] = successParts[i].split("-")[0].split("\"")[1];
}
var urls = new Array();
var etags = new Array();

console.log('上传分片...');
this.status='上传中';
{
loadNext();
fileReader.onload = async (e) => {
await uploadChunk(e);
@@ -215,44 +234,18 @@
if (currentChunk < chunks) {
console.log(`第${currentChunk}个分片上传完成, 开始第${currentChunk +1}/${chunks}个分片上传`);
this.progress = Math.ceil(currentChunk / chunks)*100;
await loadNext();
} else {
//console.log({{.dataset_id}});
await completeUpload();
console.log(`文件上传完成:${file.name} \n分片:${chunks} 大小:${file.size} 用时:${(new Date().getTime() - time)/1000} s`);
//window.location.reload();
this.progress = 100;
this.status='上传完成';
window.location.reload();
}
};
}

var successChunks = new Array();
var successParts = new Array();
successParts = file.chunks.split(",");
for (let i = 0; i < successParts.length; i++) {
successChunks[i] = successParts[i].split("-")[0].split("\"")[1];
}
var urls = new Array();
var etags = new Array();

console.log('上传分片...');
upload();

},
chkMd5(file) {
let time = new Date().getTime();
let fileReader = new FileReader();
let spark = new SparkMD5(); //创建md5对象(基于SparkMD5)
fileReader.readAsBinaryString(file.file);
console.log('开始计算MD5...')
//文件读取完毕之后的处理
fileReader.onload = (e) => {
spark.appendBinary(e.target.result);
let md5 = spark.end();
console.log(`MD5计算完成:${file.name} \nMD5:${md5} \n用时:${new Date().getTime() - time} ms`);
spark.destroy();
};
},
//计算MD5
computeMD5(file) {
@@ -266,7 +259,7 @@
let time = new Date().getTime();

console.log('计算MD5...')
file.cmd5 = true;
this.status='计算MD5';
file.totalChunkCounts = chunks;
loadNext();

@@ -276,9 +269,6 @@
if (currentChunk < chunks) {
console.log(`第${currentChunk}分片解析完成, 开始第${currentChunk +1}/${chunks}分片解析`);
// let percent = Math.floor(currentChunk / chunks * 100);
// console.log(percent);
// file.cmd5progress = percent;
loadNext();
} else {
let md5 = spark.end();
@@ -312,6 +302,7 @@
file.chunks = "";
this.multipartUpload(file);
} else {
//失败如何处理
return;
}
} else {
@@ -321,7 +312,9 @@
await addAttachment(file);
}
console.log("文件已上传完成");
//window.location.reload();
this.progress = 100;
this.status='上传完成';
window.location.reload();
} else {
//断点续传
this.multipartUpload(file);
@@ -344,37 +337,7 @@
});
})
}
},
// 文件进度的回调
onFileProgress(rootFile, file, chunk) {
console.log(`上传中 ${file.name},chunk:${chunk.startByte / 1024 / 1024} ~ ${chunk.endByte / 1024 / 1024}`)
},
onFileSuccess(rootFile, file, response, chunk) {
let resp = JSON.parse(response);
if (resp.code === 0 && resp.merge === false) {
console.log('上传成功,不需要合并');
} else {
axios.post('http://localhost:9999/up.php?action=merge', {
filename: file.name,
identifier: file.uniqueIdentifier,
totalSize: file.size,
totalChunks: chunk.offset + 1
}).then(function(res){
if (res.code === 0) {
console.log('上传成功')
} else {
console.log(res.message);
}
})
.catch(function(error){
console.log(error);
});
}
},

onFileError(rootFile, file, response, chunk) {
console.log('Error:', response)
},
}
}
}
</script>


Loading…
Cancel
Save