From c69bbe3eca28679ebacf5b39cba3c6969ae6d6a1 Mon Sep 17 00:00:00 2001 From: qkqpttgf <45693631+qkqpttgf@users.noreply.github.com> Date: Sat, 30 May 2020 15:00:13 +0800 Subject: [PATCH] guest calculate md5 before upload --- theme/classic.html | 98 ++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/theme/classic.html b/theme/classic.html index efebcb5..8bf93ef 100644 --- a/theme/classic.html +++ b/theme/classic.html @@ -821,20 +821,55 @@ tr1.setAttribute('data-to',1); var td1=document.createElement('td'); tr1.appendChild(td1); - td1.setAttribute('style','width:30%'); + td1.setAttribute('style','width:30%;word-break:break-word;'); td1.setAttribute('id','upfile_td1_'+timea+'_'+i); td1.innerHTML=(file.webkitRelativePath||file.name)+'
'+size_format(file.size); var td2=document.createElement('td'); tr1.appendChild(td2); td2.setAttribute('id','upfile_td2_'+timea+'_'+i); - td2.innerHTML=' ...'; if (file.size>100*1024*1024*1024) { td2.innerHTML=''; uploadbuttonshow(); return; } + upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name)); + + function getext(str) { + strarry=str.split('.'); + ext=strarry[strarry.length-1].toLowerCase(); + var reg = new RegExp(".","g"); + var a = str.replace(reg,""); + if (a == ext) ext = ""; + else ext = "." + ext; + return ext; + } + var ext = getext(file.webkitRelativePath||file.name); + var spark = new SparkMD5.ArrayBuffer(); + var reader = new FileReader(); + var chunksize=10*1024*1024; + var asize = 0; + function readblob(start) { + var end=start+chunksize; + var blob = file.slice(start,end); + reader.readAsArrayBuffer(blob); + } + readblob(asize); + + reader.onload = function(e){ + td2.innerHTML=' md5: '+(asize*100/file.size).toFixed(2)+'%'; + var binary = this.result; + spark.append(binary); + asize += chunksize; + if (asize < file.size) { + readblob(asize); + } else { + var filemd5 = spark.end(); + td2.innerHTML='md5: '+filemd5; + upbigfilename = filemd5+ext; + + td2.innerHTML=' ...'; var xhr1 = new XMLHttpRequest(); - xhr1.open("GET", '?action=upbigfile&upbigfilename='+ encodeURIComponent((file.webkitRelativePath||file.name)) +'&filesize='+ file.size +'&lastModified='+ file.lastModified); + xhr1.open("GET", '?action=upbigfile&upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&lastModified='+ file.lastModified); xhr1.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr1.send(null); xhr1.onload = function(e){ @@ -847,14 +882,23 @@ uploadbuttonshow(); } else { td2.innerHTML=' ...'; - binupfile(file,html['uploadUrl'],timea+'_'+i); + binupfile(file,html['uploadUrl'],timea+'_'+i, upbigfilename); } } + if (xhr1.status==409) { + td2.innerHTML='md5: '+filemd5; + tdnum = timea+'_'+i; + document.getElementById('upfile_td1_'+tdnum).innerHTML='
'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'
'; + } if (i + } + } + } } function size_format(num) { @@ -875,7 +919,7 @@ } return num.toFixed(2) + ' GB'; } - function binupfile(file,url,tdnum){ + function binupfile(file,url,tdnum,filename){ var label=document.getElementById('upfile_td2_'+tdnum); var reader = new FileReader(); var StartStr=''; @@ -896,9 +940,7 @@ var a = html['nextExpectedRanges'][0]; newstartsize = Number( a.slice(0,a.indexOf("-")) ); StartTime = new Date(); - asize = newstartsize; - if (newstartsize==0) { StartStr=':' +StartTime.toLocaleString()+'
' ; } else { @@ -912,19 +954,9 @@ reader.readAsArrayBuffer(blob); } readblob(asize); - - var spark = new SparkMD5.ArrayBuffer(); - + reader.onload = function(e){ var binary = this.result; - - spark.append(binary); - if (asize < newstartsize) { - asize += chunksize; - readblob(asize); - return; - } - var xhr = new XMLHttpRequest(); xhr.open("PUT", url, true); //xhr.setRequestHeader('x-requested-with','XMLHttpRequest'); @@ -945,38 +977,12 @@ if (response['size']>0) { // contain size, upload finish. 有size说明是最终返回,上传结束 var xhr3 = new XMLHttpRequest(); - xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+encodeURIComponent((file.webkitRelativePath||file.name))); + xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename); xhr3.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr3.send(null); xhr3.onload = function(e){ console.log(xhr3.responseText+','+xhr3.status); } - - var filemd5 = spark.end(); - var xhr4 = new XMLHttpRequest(); - xhr4.open("GET", '?action=uploaded_rename&filename='+encodeURIComponent((file.webkitRelativePath||file.name))+'&filemd5='+filemd5); - xhr4.setRequestHeader('x-requested-with','XMLHttpRequest'); - xhr4.send(null); - xhr4.onload = function(e){ - console.log(xhr4.responseText+','+xhr4.status); - var filename; - //if (xhr4.status==200) filename = JSON.parse(xhr4.responseText)['name']; - //if (xhr4.status==409) filename = filemd5 + (file.webkitRelativePath||file.name).substr((file.webkitRelativePath||file.name).indexOf('.')); - filename = JSON.parse(xhr4.responseText)['name']; - if (filename=='') { - alert(''); - uploadbuttonshow(); - return; - } - var lasturl = location.href; - if (lasturl.substr(lasturl.length-1)!='/') lasturl += '/'; - lasturl += filename + '?preview'; - //window.open(lasturl); - document.getElementById('upfile_a_'+tdnum).href = lasturl; - document.getElementById('upfile_a1_'+tdnum).href = filename; - document.getElementById('upfile_cpbt_'+tdnum).style.display = ""; - } - EndTime=new Date(); MiddleStr = ':'+EndTime.toLocaleString()+'
'; if (newstartsize==0) { @@ -1004,7 +1010,7 @@ xhr.send(binary); } } else { - if (window.location.pathname.indexOf('%23')>0||(file.webkitRelativePath||file.name).indexOf('%23')>0) { + if (window.location.pathname.indexOf('%23')>0||filename.indexOf('%23')>0) { label.innerHTML=''; } else { label.innerHTML=''+xhr2.responseText+''; -- GitLab