w-converhp 2.0.39 → 2.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/w-converhp-client.umd.js +2 -2
- package/dist/w-converhp-client.umd.js.map +1 -1
- package/dist/w-converhp-server.umd.js +2 -2
- package/dist/w-converhp-server.umd.js.map +1 -1
- package/docs/WConverhpClient.html +1 -1
- package/docs/WConverhpClient.mjs.html +55 -42
- package/docs/WConverhpServer.html +2 -42
- package/docs/WConverhpServer.mjs.html +20 -22
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/scla.mjs +1 -0
- package/src/WConverhpClient.mjs +54 -41
- package/src/WConverhpServer.mjs +19 -21
- package/src/checkSlicesHash.mjs +1 -1
- package/src/checkSlicesHash.wk.umd.js +1 -1
- package/src/checkTotalHash.mjs +3 -1
- package/src/checkTotalHash.wk.umd.js +1 -1
- package/src/managerMergeSlices.mjs +63 -51
|
@@ -529,7 +529,7 @@
|
|
|
529
529
|
<br class="clear">
|
|
530
530
|
|
|
531
531
|
<footer>
|
|
532
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
532
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Apr 24 2025 09:18:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
533
533
|
</footer>
|
|
534
534
|
|
|
535
535
|
<script>prettyPrint();</script>
|
|
@@ -724,6 +724,33 @@ function WConverhpClient(opt) {
|
|
|
724
724
|
let chunkTotal = Math.ceil(fileTotalSize / sizeSlice)
|
|
725
725
|
// console.log('chunkTotal', chunkTotal)
|
|
726
726
|
|
|
727
|
+
//progCount, progWeightSlice
|
|
728
|
+
let progCount = 0
|
|
729
|
+
let progWeightSlice = 0.99 //上傳階段進度使用99%
|
|
730
|
+
// let progWeightMerge = 0.01 //合併階段進度使用1%
|
|
731
|
+
|
|
732
|
+
//cbProgressSlice
|
|
733
|
+
let cbProgressSlice = (msg) => {
|
|
734
|
+
let perc = msg.prog
|
|
735
|
+
let dir = msg.m
|
|
736
|
+
if (dir === 'upload' && perc === 100) {
|
|
737
|
+
progCount++
|
|
738
|
+
let r = progCount / chunkTotal
|
|
739
|
+
let prog = r * progWeightSlice * 100
|
|
740
|
+
let psiz = r * fileTotalSize
|
|
741
|
+
cbProgress({ prog, p: psiz, m: 'upload' })
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
//cbProgressMerge
|
|
746
|
+
let cbProgressMerge = (msg) => {
|
|
747
|
+
let perc = msg.prog
|
|
748
|
+
let dir = msg.m
|
|
749
|
+
if (dir === 'download' && perc === 100) {
|
|
750
|
+
cbProgress({ prog: 100, p: fileTotalSize, m: 'upload' })
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
|
|
727
754
|
//fileTotalHash
|
|
728
755
|
// console.log(`calc hash for fileTotalSize[${fileTotalSize}]...`)
|
|
729
756
|
let fileTotalHash = await calcHash(bb)
|
|
@@ -741,20 +768,22 @@ function WConverhpClient(opt) {
|
|
|
741
768
|
// bSls: true,
|
|
742
769
|
// slks: [
|
|
743
770
|
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
|
|
744
|
-
// 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
|
745
|
-
// 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
|
|
746
|
-
// 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
|
747
|
-
// 48, 49, 50, 51, 52, 53
|
|
748
771
|
// ]
|
|
749
772
|
// }
|
|
750
773
|
|
|
751
774
|
//check
|
|
752
775
|
if (resUpCkt.bAllHash) {
|
|
753
776
|
// console.log('已有上傳大檔')
|
|
777
|
+
|
|
778
|
+
//cbProgressMerge
|
|
779
|
+
cbProgressMerge({ prog: 100, m: 'download' }) //觸發上傳完畢後之下載回應, 故m須為download
|
|
780
|
+
|
|
781
|
+
//resMg, 直接回傳
|
|
754
782
|
let resMg = {
|
|
755
783
|
filename: fileTotalName,
|
|
756
784
|
path: resUpCkt.path,
|
|
757
785
|
}
|
|
786
|
+
|
|
758
787
|
return resMg
|
|
759
788
|
}
|
|
760
789
|
|
|
@@ -819,33 +848,6 @@ function WConverhpClient(opt) {
|
|
|
819
848
|
let packageId = fileTotalHash
|
|
820
849
|
// console.log('packageId', packageId)
|
|
821
850
|
|
|
822
|
-
//progCount, progWeightSlice
|
|
823
|
-
let progCount = 0
|
|
824
|
-
let progWeightSlice = 0.99 //上傳階段進度使用99%
|
|
825
|
-
// let progWeightMerge = 0.01 //合併階段進度使用1%
|
|
826
|
-
|
|
827
|
-
//cbProgressSlice
|
|
828
|
-
let cbProgressSlice = (msg) => {
|
|
829
|
-
let perc = msg.prog
|
|
830
|
-
let dir = msg.m
|
|
831
|
-
if (dir === 'upload' && perc === 100) {
|
|
832
|
-
progCount++
|
|
833
|
-
let r = progCount / chunkTotal
|
|
834
|
-
let prog = r * progWeightSlice * 100
|
|
835
|
-
let psiz = r * fileTotalSize
|
|
836
|
-
cbProgress({ prog, p: psiz, m: 'upload' })
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
//cbProgressMerge
|
|
841
|
-
let cbProgressMerge = (msg) => {
|
|
842
|
-
let perc = msg.prog
|
|
843
|
-
let dir = msg.m
|
|
844
|
-
if (dir === 'download' && perc === 100) {
|
|
845
|
-
cbProgress({ prog: 100, p: fileTotalSize, m: 'upload' })
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
|
|
849
851
|
//upload slice
|
|
850
852
|
// console.log(`upload slice...`)
|
|
851
853
|
for (let i = 0; i < chunkTotal; i++) {
|
|
@@ -906,22 +908,33 @@ function WConverhpClient(opt) {
|
|
|
906
908
|
// }
|
|
907
909
|
|
|
908
910
|
//check
|
|
909
|
-
if (res.state === '
|
|
911
|
+
if (res.state === 'success') {
|
|
912
|
+
|
|
913
|
+
//clearInterval
|
|
914
|
+
clearInterval(t)
|
|
910
915
|
|
|
911
916
|
//cbProgressMerge
|
|
912
|
-
cbProgressMerge({ prog: 100, m: 'download' })
|
|
917
|
+
cbProgressMerge({ prog: 100, m: 'download' }) //觸發上傳完畢後之下載回應, 故m須為download
|
|
913
918
|
|
|
914
|
-
//resolve,
|
|
919
|
+
//resolve, state為'success'時提取msg回傳
|
|
920
|
+
pm.resolve(res.msg)
|
|
921
|
+
|
|
922
|
+
}
|
|
923
|
+
else if (res.state === 'error') {
|
|
924
|
+
console.log('merge-slices-get error', res)
|
|
925
|
+
|
|
926
|
+
//clearInterval
|
|
927
|
+
clearInterval(t)
|
|
928
|
+
|
|
929
|
+
//reject, state為'error'時會於msg提供錯誤訊息
|
|
915
930
|
pm.resolve(res.msg)
|
|
916
931
|
|
|
917
932
|
}
|
|
918
933
|
|
|
919
934
|
})
|
|
920
935
|
.catch((err) => {
|
|
921
|
-
console.log(err)
|
|
922
|
-
|
|
923
|
-
.finally(() => {
|
|
924
|
-
clearInterval(t)
|
|
936
|
+
console.log('merge-slices-get catch', err)
|
|
937
|
+
//可能發生網路斷訊錯誤, 不clearInterval, 持續輪循測試合併大檔之狀態
|
|
925
938
|
})
|
|
926
939
|
|
|
927
940
|
}, 2000)
|
|
@@ -930,11 +943,11 @@ function WConverhpClient(opt) {
|
|
|
930
943
|
}
|
|
931
944
|
|
|
932
945
|
//checkMerging
|
|
933
|
-
let
|
|
934
|
-
// console.log('
|
|
946
|
+
let resMg = await checkMerging()
|
|
947
|
+
// console.log('resMg', resMg)
|
|
935
948
|
|
|
936
949
|
// console.log(`upload slice done`)
|
|
937
|
-
return
|
|
950
|
+
return resMg
|
|
938
951
|
}
|
|
939
952
|
|
|
940
953
|
//execute
|
|
@@ -1094,7 +1107,7 @@ export default WConverhpClient
|
|
|
1094
1107
|
<br class="clear">
|
|
1095
1108
|
|
|
1096
1109
|
<footer>
|
|
1097
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
1110
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Apr 24 2025 09:18:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1098
1111
|
</footer>
|
|
1099
1112
|
|
|
1100
1113
|
<script>prettyPrint();</script>
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
|
|
81
81
|
<dt class="tag-source">Source:</dt>
|
|
82
82
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
83
|
-
<a href="WConverhpServer.mjs.html">WConverhpServer.mjs</a>, <a href="WConverhpServer.mjs.html#
|
|
83
|
+
<a href="WConverhpServer.mjs.html">WConverhpServer.mjs</a>, <a href="WConverhpServer.mjs.html#line192">line 192</a>
|
|
84
84
|
</li></ul></dd>
|
|
85
85
|
|
|
86
86
|
|
|
@@ -582,46 +582,6 @@
|
|
|
582
582
|
|
|
583
583
|
|
|
584
584
|
|
|
585
|
-
<tr>
|
|
586
|
-
|
|
587
|
-
<td class="name"><code>delayForBasic</code></td>
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
<td class="type">
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
<span class="param-type">Integer</span>
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
</td>
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
<td class="attributes">
|
|
602
|
-
|
|
603
|
-
<optional><br>
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
</td>
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
<td class="default">
|
|
614
|
-
|
|
615
|
-
<code>0</code>
|
|
616
|
-
|
|
617
|
-
</td>
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
<td class="description last"><p>輸入基本API用延遲響應時間,單位ms,預設0</p></td>
|
|
621
|
-
</tr>
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
585
|
<tr>
|
|
626
586
|
|
|
627
587
|
<td class="name"><code>delayForSlice</code></td>
|
|
@@ -789,7 +749,7 @@
|
|
|
789
749
|
<br class="clear">
|
|
790
750
|
|
|
791
751
|
<footer>
|
|
792
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
752
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Apr 24 2025 09:18:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
793
753
|
</footer>
|
|
794
754
|
|
|
795
755
|
<script>prettyPrint();</script>
|
|
@@ -70,7 +70,7 @@ import obj2u8arr from 'wsemi/src/obj2u8arr.mjs'
|
|
|
70
70
|
import u8arr2obj from 'wsemi/src/u8arr2obj.mjs'
|
|
71
71
|
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
72
72
|
import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
|
|
73
|
-
import
|
|
73
|
+
import mmg from './managerMergeSlices.mjs'
|
|
74
74
|
// import checkTotalHash from './checkTotalHash.mjs'
|
|
75
75
|
import checkTotalHash from './checkTotalHash.wk.umd.js'
|
|
76
76
|
// import checkSlicesHash from './checkSlicesHash.mjs'
|
|
@@ -82,10 +82,6 @@ import checkSlicesHash from './checkSlicesHash.wk.umd.js'
|
|
|
82
82
|
//回傳前端(browser)時, 針對超大檔, 可用POST並用stream回傳但還要處理進度條, 若要交由瀏覽器下載器處理, 只能用GET並用stream回傳, 且前端只能用window.location.href或a.href+a.click()下載
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
//mmg
|
|
86
|
-
let mmg = managerMergeSlices()
|
|
87
|
-
|
|
88
|
-
|
|
89
85
|
/**
|
|
90
86
|
* 建立Hapi伺服器
|
|
91
87
|
*
|
|
@@ -100,7 +96,6 @@ let mmg = managerMergeSlices()
|
|
|
100
96
|
* @param {Integer} [opt.sizeSlice=1024*1024] 輸入切片上傳檔案之切片檔案大小整數,單位為Byte,預設為1024*1024
|
|
101
97
|
* @param {Function} [opt.verifyConn=()=>{return true}] 輸入呼叫API時檢測函數,預設()=>{return true}
|
|
102
98
|
* @param {Array} [opt.corsOrigins=['*']] 輸入允許跨域網域陣列,若給予['*']代表允許全部,預設['*']
|
|
103
|
-
* @param {Integer} [opt.delayForBasic=0] 輸入基本API用延遲響應時間,單位ms,預設0
|
|
104
99
|
* @param {Integer} [opt.delayForSlice=100] 輸入切片上傳檔案API用延遲響應時間,單位ms,預設100
|
|
105
100
|
* @param {Boolean} [opt.serverHapi=null] 輸入外部提供Hapi伺服器物件,預設null
|
|
106
101
|
* @returns {Object} 回傳事件物件,可監聽事件execute、upload、handler
|
|
@@ -302,13 +297,6 @@ function WConverhpServer(opt = {}) {
|
|
|
302
297
|
corsOrigins = ['*']
|
|
303
298
|
}
|
|
304
299
|
|
|
305
|
-
//delayForBasic
|
|
306
|
-
let delayForBasic = get(opt, 'delayForBasic', '')
|
|
307
|
-
if (!isp0int(delayForBasic)) {
|
|
308
|
-
delayForBasic = 0
|
|
309
|
-
}
|
|
310
|
-
delayForBasic = cint(delayForBasic)
|
|
311
|
-
|
|
312
300
|
//delayForSlice
|
|
313
301
|
let delayForSlice = get(opt, 'delayForSlice', '')
|
|
314
302
|
if (!isp0int(delayForSlice)) {
|
|
@@ -579,20 +567,24 @@ function WConverhpServer(opt = {}) {
|
|
|
579
567
|
chunks.push(chunk)
|
|
580
568
|
// console.log('chunk.length', chunk.length)
|
|
581
569
|
|
|
582
|
-
//
|
|
583
|
-
|
|
584
|
-
cb()
|
|
585
|
-
}, delayForBasic)
|
|
570
|
+
//cb
|
|
571
|
+
cb()
|
|
586
572
|
|
|
587
573
|
}
|
|
588
574
|
})
|
|
589
575
|
|
|
576
|
+
//finish
|
|
577
|
+
smw.on('finish', () => {
|
|
578
|
+
console.log('[smw] finished')
|
|
579
|
+
})
|
|
580
|
+
|
|
590
581
|
//pipe
|
|
591
582
|
req.payload.pipe(smw)
|
|
592
583
|
|
|
593
584
|
//end
|
|
594
585
|
req.payload.on('end', () => {
|
|
595
586
|
// console.log(`receive payload done`)
|
|
587
|
+
console.log('[req.payload] end')
|
|
596
588
|
|
|
597
589
|
//bb
|
|
598
590
|
let bb = Buffer.concat(chunks)
|
|
@@ -606,6 +598,11 @@ function WConverhpServer(opt = {}) {
|
|
|
606
598
|
|
|
607
599
|
})
|
|
608
600
|
|
|
601
|
+
//close
|
|
602
|
+
req.payload.on('close', () => {
|
|
603
|
+
console.log('[req.payload] close')
|
|
604
|
+
})
|
|
605
|
+
|
|
609
606
|
//error
|
|
610
607
|
req.payload.on('error', (err) => {
|
|
611
608
|
// console.log(`receive payload err`, err)
|
|
@@ -811,14 +808,15 @@ function WConverhpServer(opt = {}) {
|
|
|
811
808
|
|
|
812
809
|
//out
|
|
813
810
|
out = {
|
|
814
|
-
queueId,
|
|
815
811
|
state: r.state,
|
|
812
|
+
msg: r.msg, //state為'error'時會於msg提供錯誤訊息
|
|
813
|
+
queueId,
|
|
816
814
|
filename,
|
|
817
815
|
path: r.path,
|
|
818
816
|
}
|
|
819
817
|
|
|
820
818
|
//check
|
|
821
|
-
if (r.state === '
|
|
819
|
+
if (r.state === 'success') {
|
|
822
820
|
|
|
823
821
|
//ri
|
|
824
822
|
let ri = {
|
|
@@ -831,9 +829,9 @@ function WConverhpServer(opt = {}) {
|
|
|
831
829
|
let ro = await procUpload(ri)
|
|
832
830
|
// console.log('procUpload done', ro)
|
|
833
831
|
|
|
834
|
-
//out merge, ro須附加至msg, 才供前端偵測state為'
|
|
832
|
+
//out merge, ro須附加至msg, 才供前端偵測state為'success'時提取msg顯示
|
|
835
833
|
out = {
|
|
836
|
-
...out,
|
|
834
|
+
...out, //state為'success'時msg為空字串, 直接被ro複寫至msg即可
|
|
837
835
|
msg: ro,
|
|
838
836
|
}
|
|
839
837
|
|
|
@@ -1477,7 +1475,7 @@ export default WConverhpServer
|
|
|
1477
1475
|
<br class="clear">
|
|
1478
1476
|
|
|
1479
1477
|
<footer>
|
|
1480
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
1478
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Apr 24 2025 09:18:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1481
1479
|
</footer>
|
|
1482
1480
|
|
|
1483
1481
|
<script>prettyPrint();</script>
|
package/docs/index.html
CHANGED
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
<br class="clear">
|
|
72
72
|
|
|
73
73
|
<footer>
|
|
74
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Apr 24 2025 09:18:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
75
75
|
</footer>
|
|
76
76
|
|
|
77
77
|
<script>prettyPrint();</script>
|
package/package.json
CHANGED
package/scla.mjs
CHANGED
package/src/WConverhpClient.mjs
CHANGED
|
@@ -677,6 +677,33 @@ function WConverhpClient(opt) {
|
|
|
677
677
|
let chunkTotal = Math.ceil(fileTotalSize / sizeSlice)
|
|
678
678
|
// console.log('chunkTotal', chunkTotal)
|
|
679
679
|
|
|
680
|
+
//progCount, progWeightSlice
|
|
681
|
+
let progCount = 0
|
|
682
|
+
let progWeightSlice = 0.99 //上傳階段進度使用99%
|
|
683
|
+
// let progWeightMerge = 0.01 //合併階段進度使用1%
|
|
684
|
+
|
|
685
|
+
//cbProgressSlice
|
|
686
|
+
let cbProgressSlice = (msg) => {
|
|
687
|
+
let perc = msg.prog
|
|
688
|
+
let dir = msg.m
|
|
689
|
+
if (dir === 'upload' && perc === 100) {
|
|
690
|
+
progCount++
|
|
691
|
+
let r = progCount / chunkTotal
|
|
692
|
+
let prog = r * progWeightSlice * 100
|
|
693
|
+
let psiz = r * fileTotalSize
|
|
694
|
+
cbProgress({ prog, p: psiz, m: 'upload' })
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
//cbProgressMerge
|
|
699
|
+
let cbProgressMerge = (msg) => {
|
|
700
|
+
let perc = msg.prog
|
|
701
|
+
let dir = msg.m
|
|
702
|
+
if (dir === 'download' && perc === 100) {
|
|
703
|
+
cbProgress({ prog: 100, p: fileTotalSize, m: 'upload' })
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
|
|
680
707
|
//fileTotalHash
|
|
681
708
|
// console.log(`calc hash for fileTotalSize[${fileTotalSize}]...`)
|
|
682
709
|
let fileTotalHash = await calcHash(bb)
|
|
@@ -694,20 +721,22 @@ function WConverhpClient(opt) {
|
|
|
694
721
|
// bSls: true,
|
|
695
722
|
// slks: [
|
|
696
723
|
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
|
|
697
|
-
// 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
|
698
|
-
// 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
|
|
699
|
-
// 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
|
700
|
-
// 48, 49, 50, 51, 52, 53
|
|
701
724
|
// ]
|
|
702
725
|
// }
|
|
703
726
|
|
|
704
727
|
//check
|
|
705
728
|
if (resUpCkt.bAllHash) {
|
|
706
729
|
// console.log('已有上傳大檔')
|
|
730
|
+
|
|
731
|
+
//cbProgressMerge
|
|
732
|
+
cbProgressMerge({ prog: 100, m: 'download' }) //觸發上傳完畢後之下載回應, 故m須為download
|
|
733
|
+
|
|
734
|
+
//resMg, 直接回傳
|
|
707
735
|
let resMg = {
|
|
708
736
|
filename: fileTotalName,
|
|
709
737
|
path: resUpCkt.path,
|
|
710
738
|
}
|
|
739
|
+
|
|
711
740
|
return resMg
|
|
712
741
|
}
|
|
713
742
|
|
|
@@ -772,33 +801,6 @@ function WConverhpClient(opt) {
|
|
|
772
801
|
let packageId = fileTotalHash
|
|
773
802
|
// console.log('packageId', packageId)
|
|
774
803
|
|
|
775
|
-
//progCount, progWeightSlice
|
|
776
|
-
let progCount = 0
|
|
777
|
-
let progWeightSlice = 0.99 //上傳階段進度使用99%
|
|
778
|
-
// let progWeightMerge = 0.01 //合併階段進度使用1%
|
|
779
|
-
|
|
780
|
-
//cbProgressSlice
|
|
781
|
-
let cbProgressSlice = (msg) => {
|
|
782
|
-
let perc = msg.prog
|
|
783
|
-
let dir = msg.m
|
|
784
|
-
if (dir === 'upload' && perc === 100) {
|
|
785
|
-
progCount++
|
|
786
|
-
let r = progCount / chunkTotal
|
|
787
|
-
let prog = r * progWeightSlice * 100
|
|
788
|
-
let psiz = r * fileTotalSize
|
|
789
|
-
cbProgress({ prog, p: psiz, m: 'upload' })
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
|
|
793
|
-
//cbProgressMerge
|
|
794
|
-
let cbProgressMerge = (msg) => {
|
|
795
|
-
let perc = msg.prog
|
|
796
|
-
let dir = msg.m
|
|
797
|
-
if (dir === 'download' && perc === 100) {
|
|
798
|
-
cbProgress({ prog: 100, p: fileTotalSize, m: 'upload' })
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
|
|
802
804
|
//upload slice
|
|
803
805
|
// console.log(`upload slice...`)
|
|
804
806
|
for (let i = 0; i < chunkTotal; i++) {
|
|
@@ -859,22 +861,33 @@ function WConverhpClient(opt) {
|
|
|
859
861
|
// }
|
|
860
862
|
|
|
861
863
|
//check
|
|
862
|
-
if (res.state === '
|
|
864
|
+
if (res.state === 'success') {
|
|
865
|
+
|
|
866
|
+
//clearInterval
|
|
867
|
+
clearInterval(t)
|
|
863
868
|
|
|
864
869
|
//cbProgressMerge
|
|
865
|
-
cbProgressMerge({ prog: 100, m: 'download' })
|
|
870
|
+
cbProgressMerge({ prog: 100, m: 'download' }) //觸發上傳完畢後之下載回應, 故m須為download
|
|
866
871
|
|
|
867
|
-
//resolve,
|
|
872
|
+
//resolve, state為'success'時提取msg回傳
|
|
873
|
+
pm.resolve(res.msg)
|
|
874
|
+
|
|
875
|
+
}
|
|
876
|
+
else if (res.state === 'error') {
|
|
877
|
+
console.log('merge-slices-get error', res)
|
|
878
|
+
|
|
879
|
+
//clearInterval
|
|
880
|
+
clearInterval(t)
|
|
881
|
+
|
|
882
|
+
//reject, state為'error'時會於msg提供錯誤訊息
|
|
868
883
|
pm.resolve(res.msg)
|
|
869
884
|
|
|
870
885
|
}
|
|
871
886
|
|
|
872
887
|
})
|
|
873
888
|
.catch((err) => {
|
|
874
|
-
console.log(err)
|
|
875
|
-
|
|
876
|
-
.finally(() => {
|
|
877
|
-
clearInterval(t)
|
|
889
|
+
console.log('merge-slices-get catch', err)
|
|
890
|
+
//可能發生網路斷訊錯誤, 不clearInterval, 持續輪循測試合併大檔之狀態
|
|
878
891
|
})
|
|
879
892
|
|
|
880
893
|
}, 2000)
|
|
@@ -883,11 +896,11 @@ function WConverhpClient(opt) {
|
|
|
883
896
|
}
|
|
884
897
|
|
|
885
898
|
//checkMerging
|
|
886
|
-
let
|
|
887
|
-
// console.log('
|
|
899
|
+
let resMg = await checkMerging()
|
|
900
|
+
// console.log('resMg', resMg)
|
|
888
901
|
|
|
889
902
|
// console.log(`upload slice done`)
|
|
890
|
-
return
|
|
903
|
+
return resMg
|
|
891
904
|
}
|
|
892
905
|
|
|
893
906
|
//execute
|
package/src/WConverhpServer.mjs
CHANGED
|
@@ -23,7 +23,7 @@ import obj2u8arr from 'wsemi/src/obj2u8arr.mjs'
|
|
|
23
23
|
import u8arr2obj from 'wsemi/src/u8arr2obj.mjs'
|
|
24
24
|
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
25
25
|
import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
|
|
26
|
-
import
|
|
26
|
+
import mmg from './managerMergeSlices.mjs'
|
|
27
27
|
// import checkTotalHash from './checkTotalHash.mjs'
|
|
28
28
|
import checkTotalHash from './checkTotalHash.wk.umd.js'
|
|
29
29
|
// import checkSlicesHash from './checkSlicesHash.mjs'
|
|
@@ -35,10 +35,6 @@ import checkSlicesHash from './checkSlicesHash.wk.umd.js'
|
|
|
35
35
|
//回傳前端(browser)時, 針對超大檔, 可用POST並用stream回傳但還要處理進度條, 若要交由瀏覽器下載器處理, 只能用GET並用stream回傳, 且前端只能用window.location.href或a.href+a.click()下載
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
//mmg
|
|
39
|
-
let mmg = managerMergeSlices()
|
|
40
|
-
|
|
41
|
-
|
|
42
38
|
/**
|
|
43
39
|
* 建立Hapi伺服器
|
|
44
40
|
*
|
|
@@ -53,7 +49,6 @@ let mmg = managerMergeSlices()
|
|
|
53
49
|
* @param {Integer} [opt.sizeSlice=1024*1024] 輸入切片上傳檔案之切片檔案大小整數,單位為Byte,預設為1024*1024
|
|
54
50
|
* @param {Function} [opt.verifyConn=()=>{return true}] 輸入呼叫API時檢測函數,預設()=>{return true}
|
|
55
51
|
* @param {Array} [opt.corsOrigins=['*']] 輸入允許跨域網域陣列,若給予['*']代表允許全部,預設['*']
|
|
56
|
-
* @param {Integer} [opt.delayForBasic=0] 輸入基本API用延遲響應時間,單位ms,預設0
|
|
57
52
|
* @param {Integer} [opt.delayForSlice=100] 輸入切片上傳檔案API用延遲響應時間,單位ms,預設100
|
|
58
53
|
* @param {Boolean} [opt.serverHapi=null] 輸入外部提供Hapi伺服器物件,預設null
|
|
59
54
|
* @returns {Object} 回傳事件物件,可監聽事件execute、upload、handler
|
|
@@ -255,13 +250,6 @@ function WConverhpServer(opt = {}) {
|
|
|
255
250
|
corsOrigins = ['*']
|
|
256
251
|
}
|
|
257
252
|
|
|
258
|
-
//delayForBasic
|
|
259
|
-
let delayForBasic = get(opt, 'delayForBasic', '')
|
|
260
|
-
if (!isp0int(delayForBasic)) {
|
|
261
|
-
delayForBasic = 0
|
|
262
|
-
}
|
|
263
|
-
delayForBasic = cint(delayForBasic)
|
|
264
|
-
|
|
265
253
|
//delayForSlice
|
|
266
254
|
let delayForSlice = get(opt, 'delayForSlice', '')
|
|
267
255
|
if (!isp0int(delayForSlice)) {
|
|
@@ -532,20 +520,24 @@ function WConverhpServer(opt = {}) {
|
|
|
532
520
|
chunks.push(chunk)
|
|
533
521
|
// console.log('chunk.length', chunk.length)
|
|
534
522
|
|
|
535
|
-
//
|
|
536
|
-
|
|
537
|
-
cb()
|
|
538
|
-
}, delayForBasic)
|
|
523
|
+
//cb
|
|
524
|
+
cb()
|
|
539
525
|
|
|
540
526
|
}
|
|
541
527
|
})
|
|
542
528
|
|
|
529
|
+
//finish
|
|
530
|
+
smw.on('finish', () => {
|
|
531
|
+
console.log('[smw] finished')
|
|
532
|
+
})
|
|
533
|
+
|
|
543
534
|
//pipe
|
|
544
535
|
req.payload.pipe(smw)
|
|
545
536
|
|
|
546
537
|
//end
|
|
547
538
|
req.payload.on('end', () => {
|
|
548
539
|
// console.log(`receive payload done`)
|
|
540
|
+
console.log('[req.payload] end')
|
|
549
541
|
|
|
550
542
|
//bb
|
|
551
543
|
let bb = Buffer.concat(chunks)
|
|
@@ -559,6 +551,11 @@ function WConverhpServer(opt = {}) {
|
|
|
559
551
|
|
|
560
552
|
})
|
|
561
553
|
|
|
554
|
+
//close
|
|
555
|
+
req.payload.on('close', () => {
|
|
556
|
+
console.log('[req.payload] close')
|
|
557
|
+
})
|
|
558
|
+
|
|
562
559
|
//error
|
|
563
560
|
req.payload.on('error', (err) => {
|
|
564
561
|
// console.log(`receive payload err`, err)
|
|
@@ -764,14 +761,15 @@ function WConverhpServer(opt = {}) {
|
|
|
764
761
|
|
|
765
762
|
//out
|
|
766
763
|
out = {
|
|
767
|
-
queueId,
|
|
768
764
|
state: r.state,
|
|
765
|
+
msg: r.msg, //state為'error'時會於msg提供錯誤訊息
|
|
766
|
+
queueId,
|
|
769
767
|
filename,
|
|
770
768
|
path: r.path,
|
|
771
769
|
}
|
|
772
770
|
|
|
773
771
|
//check
|
|
774
|
-
if (r.state === '
|
|
772
|
+
if (r.state === 'success') {
|
|
775
773
|
|
|
776
774
|
//ri
|
|
777
775
|
let ri = {
|
|
@@ -784,9 +782,9 @@ function WConverhpServer(opt = {}) {
|
|
|
784
782
|
let ro = await procUpload(ri)
|
|
785
783
|
// console.log('procUpload done', ro)
|
|
786
784
|
|
|
787
|
-
//out merge, ro須附加至msg, 才供前端偵測state為'
|
|
785
|
+
//out merge, ro須附加至msg, 才供前端偵測state為'success'時提取msg顯示
|
|
788
786
|
out = {
|
|
789
|
-
...out,
|
|
787
|
+
...out, //state為'success'時msg為空字串, 直接被ro複寫至msg即可
|
|
790
788
|
msg: ro,
|
|
791
789
|
}
|
|
792
790
|
|
package/src/checkSlicesHash.mjs
CHANGED
|
@@ -40,8 +40,8 @@ let checkSlicesHash = async(fileSliceHashs, fileHash, pathUploadTemp) => {
|
|
|
40
40
|
_fileHash = res
|
|
41
41
|
})
|
|
42
42
|
.catch((err) => {
|
|
43
|
-
console.log(err)
|
|
44
43
|
console.log(`fsIsFile(_pathFile)`, _pathFile, fsIsFile(_pathFile))
|
|
44
|
+
console.log(err)
|
|
45
45
|
})
|
|
46
46
|
// console.log('_fileHash', _fileHash)
|
|
47
47
|
|