@@ -14,7 +14,20 @@ var util = {
14
14
options . type && ( opt . type = options . type ) ;
15
15
var blob = new Blob ( [ buffer ] , options ) ;
16
16
return blob ;
17
- }
17
+ } ,
18
+ selectLocalFile : function ( params , onChange ) {
19
+ var id = 'file_selector' ;
20
+ var input = document . createElement ( 'input' ) ;
21
+ input . style = 'width:0;height:0;border:0;margin:0;padding:0;' ;
22
+ input . type = 'file' ;
23
+ input . id = id ;
24
+ input . onchange = function ( e ) {
25
+ if ( ! this . files . length ) return ;
26
+ onChange && onChange ( files ) ;
27
+ document . body . removeChild ( input ) ;
28
+ } ;
29
+ input . click ( ) ;
30
+ } ,
18
31
} ;
19
32
20
33
// 对更多字符编码的 url encode 格式
@@ -222,7 +235,7 @@ function putBucket() {
222
235
logger . log ( err || data ) ;
223
236
} ) ;
224
237
}
225
- getObject ( ) ;
238
+
226
239
function getBucket ( ) {
227
240
cos . getBucket ( {
228
241
Bucket : config . Bucket , // Bucket 格式:test-1250000000
@@ -248,7 +261,7 @@ function deleteBucket() {
248
261
Bucket : 'testnew-' + config . Bucket . substr ( config . Bucket . lastIndexOf ( '-' ) + 1 ) ,
249
262
Region : 'ap-guangzhou'
250
263
} , function ( err , data ) {
251
- console . log ( err || data ) ;
264
+ logger . log ( err || data ) ;
252
265
} ) ;
253
266
}
254
267
@@ -677,10 +690,10 @@ function putObject() {
677
690
Body : blob ,
678
691
onTaskReady : function ( tid ) {
679
692
TaskId = tid ;
680
- console . log ( 'onTaskReady' , tid ) ;
693
+ logger . log ( 'onTaskReady' , tid ) ;
681
694
} ,
682
695
onTaskStart : function ( info ) {
683
- console . log ( 'onTaskStart' , info ) ;
696
+ logger . log ( 'onTaskStart' , info ) ;
684
697
} ,
685
698
onProgress : function ( progressData ) {
686
699
logger . log ( JSON . stringify ( progressData ) ) ;
@@ -838,11 +851,8 @@ function sliceUploadFile() {
838
851
}
839
852
840
853
function selectFileToUpload ( ) {
841
- var input = document . getElementById ( 'file_selector' ) || document . createElement ( 'input' ) ;
842
- input . type = 'file' ;
843
- input . onchange = function ( e ) {
844
- document . body . removeChild ( input ) ;
845
- var file = this . files [ 0 ] ;
854
+ util . selectLocalFile ( function ( files ) {
855
+ var file = files && files [ 0 ] ;
846
856
if ( ! file ) return ;
847
857
if ( file . size > 1024 * 1024 ) {
848
858
cos . sliceUploadFile ( {
@@ -881,11 +891,7 @@ function selectFileToUpload() {
881
891
logger . log ( err || data ) ;
882
892
} ) ;
883
893
}
884
- } ;
885
- input . style = 'width:0;height:0;border:0;margin:0;padding:0;' ;
886
- input . id = 'file_selector' ;
887
- document . body . appendChild ( input ) ;
888
- input . click ( ) ;
894
+ } ) ;
889
895
}
890
896
891
897
function cancelTask ( ) {
@@ -962,7 +968,129 @@ function sliceCopyFile() {
962
968
logger . log ( data ) ;
963
969
}
964
970
} ) ;
971
+ }
972
+
973
+ function uploadFolder ( ) {
974
+ // <input type='file' name="file" webkitdirectory >
975
+ var input = document . createElement ( 'input' ) ;
976
+ input . type = 'file' ;
977
+ input . webkitdirectory = true ;
978
+ input . onchange = function ( ) {
979
+ var oFiles = input . files ;
980
+ if ( ! oFiles . length ) return ;
981
+ var files = [ ] ;
982
+ for ( var i = 0 ; i < oFiles . length ; i ++ ) {
983
+ var file = oFiles [ i ] ;
984
+ var Key = 'folder/' + file . webkitRelativePath ;
985
+ files . push ( {
986
+ Bucket : config . Bucket , // Bucket 格式:test-1250000000
987
+ Region : config . Region ,
988
+ Key : Key ,
989
+ Body : file ,
990
+ } ) ;
991
+ }
992
+ cos . uploadFiles ( {
993
+ files : files ,
994
+ SliceSize : 1024 * 1024 ,
995
+ onProgress : function ( info ) {
996
+ var percent = parseInt ( info . percent * 10000 ) / 100 ;
997
+ var speed = parseInt ( info . speed / 1024 / 1024 * 100 ) / 100 ;
998
+ logger . log ( '进度:' + percent + '%; 速度:' + speed + 'Mb/s;' ) ;
999
+ } ,
1000
+ onFileFinish : function ( err , data , options ) {
1001
+ logger . log ( options . Key + ' 上传' + ( err ? '失败' : '完成' ) ) ;
1002
+ } ,
1003
+ } , function ( err , data ) {
1004
+ logger . log ( err || data ) ;
1005
+ } ) ;
1006
+ } ;
1007
+ input . click ( ) ;
1008
+ }
1009
+
1010
+ function listFolder ( ) {
1011
+ var _listFolder = function ( params , callback ) {
1012
+ var Contents = [ ] ;
1013
+ var marker ;
1014
+ var next = function ( ) {
1015
+ params . Marker = marker ;
1016
+ cos . getBucket ( params , function ( err , data ) {
1017
+ if ( err ) return callback ( err ) ;
1018
+ if ( data && data . Contents && data . Contents . length ) {
1019
+ data . Contents . forEach ( function ( item ) {
1020
+ Contents . push ( item ) ;
1021
+ } ) ;
1022
+ }
1023
+ if ( data . IsTruncated === 'true' ) {
1024
+ marker = data . NextMarker ;
1025
+ next ( ) ;
1026
+ } else {
1027
+ callback ( null , { Contents } ) ;
1028
+ }
1029
+ } ) ;
1030
+ } ;
1031
+ next ( ) ;
1032
+ } ;
1033
+ _listFolder ( {
1034
+ Bucket : config . Bucket ,
1035
+ Region : config . Region ,
1036
+ Delimiter : '/' , // 分隔符
1037
+ Prefix : 'folder/' , // 要列出的目录前缀
1038
+ } , function ( err , data ) {
1039
+ logger . log ( err || data ) ;
1040
+ } ) ;
1041
+ }
965
1042
1043
+ function deleteFolder ( ) {
1044
+ var _deleteFolder = function ( params , callback ) {
1045
+ var deletedList = [ ] ;
1046
+ var errorList = [ ] ;
1047
+ var marker ;
1048
+ var next = function ( ) {
1049
+ params . Marker = marker ;
1050
+ cos . getBucket ( params , function ( err , data ) {
1051
+ if ( err ) return callback ( err ) ;
1052
+ var Objects = [ ] ;
1053
+ if ( data && data . Contents && data . Contents . length ) {
1054
+ data . Contents . forEach ( function ( item ) {
1055
+ Objects . push ( { Key : item . Key } ) ;
1056
+ } ) ;
1057
+ }
1058
+ var afterDeleted = function ( ) {
1059
+ if ( data . IsTruncated === 'true' ) {
1060
+ marker = data . NextMarker ;
1061
+ next ( ) ;
1062
+ } else {
1063
+ callback ( null , { Deleted : deletedList , Error : errorList } ) ;
1064
+ }
1065
+ } ;
1066
+ if ( Objects . length ) {
1067
+ cos . deleteMultipleObject ( {
1068
+ Bucket : params . Bucket ,
1069
+ Region : params . Region ,
1070
+ Objects : Objects ,
1071
+ } , function ( err , data ) {
1072
+ data . Deleted && data . Deleted . forEach ( function ( item ) {
1073
+ errorList . push ( item ) ;
1074
+ } ) ;
1075
+ data . Error && data . Error . forEach ( function ( item ) {
1076
+ errorList . push ( item ) ;
1077
+ } ) ;
1078
+ afterDeleted ( ) ;
1079
+ } ) ;
1080
+ } else {
1081
+ afterDeleted ( ) ;
1082
+ }
1083
+ } ) ;
1084
+ } ;
1085
+ next ( ) ;
1086
+ } ;
1087
+ _deleteFolder ( {
1088
+ Bucket : config . Bucket ,
1089
+ Region : config . Region ,
1090
+ Prefix : 'folder/' , // 要列出的目录前缀
1091
+ } , function ( err , data ) {
1092
+ logger . log ( err || data ) ;
1093
+ } ) ;
966
1094
}
967
1095
968
1096
( function ( ) {
@@ -1010,22 +1138,37 @@ function sliceCopyFile() {
1010
1138
'restoreObject' ,
1011
1139
'abortUploadTask' ,
1012
1140
'sliceUploadFile' ,
1013
- 'selectFileToUpload' ,
1014
1141
'cancelTask' ,
1015
1142
'pauseTask' ,
1016
1143
'restartTask' ,
1017
- 'uploadFiles' ,
1018
1144
'sliceCopyFile' ,
1145
+ 'uploadFiles' ,
1146
+ 'selectFileToUpload' ,
1147
+ '-' ,
1148
+ 'uploadFolder' ,
1149
+ 'listFolder' ,
1150
+ 'deleteFolder' ,
1019
1151
] ;
1152
+ var labelMap = {
1153
+ uploadFiles : '批量上传文件' ,
1154
+ selectFileToUpload : '选择文件上传' ,
1155
+ uploadFolder : '上传文件夹' ,
1156
+ listFolder : '列出文件夹' ,
1157
+ deleteFolder : '删除文件夹' ,
1158
+ } ;
1020
1159
var container = document . querySelector ( '.main' ) ;
1021
1160
var html = [ ] ;
1022
1161
list . forEach ( function ( name ) {
1023
- html . push ( '<a href="javascript:void(0)">' + name + '</a>' ) ;
1162
+ if ( name === '-' ) {
1163
+ html . push ( '<hr/>' ) ;
1164
+ } else {
1165
+ html . push ( '<a href="javascript:void(0)" data-method="' + name + '">' + ( labelMap [ name ] || name ) + '</a>' ) ;
1166
+ }
1024
1167
} ) ;
1025
1168
container . innerHTML = html . join ( '' ) ;
1026
1169
container . onclick = function ( e ) {
1027
1170
if ( e . target . tagName === 'A' ) {
1028
- var name = e . target . innerText . trim ( ) ;
1171
+ var name = e . target . getAttribute ( 'data-method' ) . trim ( ) ;
1029
1172
window [ name ] ( ) ;
1030
1173
}
1031
1174
} ;
0 commit comments