1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943 |
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["COS"] = factory();
- else
- root["COS"] = factory();
- })(typeof self !== 'undefined' ? self : this, function() {
- return (function(modules) {
-
- var installedModules = {};
-
- function __webpack_require__(moduleId) {
-
- if(installedModules[moduleId]) {
- return installedModules[moduleId].exports;
- }
-
- var module = installedModules[moduleId] = {
- i: moduleId,
- l: false,
- exports: {}
- };
-
- modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
- module.l = true;
-
- return module.exports;
- }
-
- __webpack_require__.m = modules;
-
- __webpack_require__.c = installedModules;
-
- __webpack_require__.d = function(exports, name, getter) {
- if(!__webpack_require__.o(exports, name)) {
- Object.defineProperty(exports, name, {
- configurable: false,
- enumerable: true,
- get: getter
- });
- }
- };
-
- __webpack_require__.n = function(module) {
- var getter = module && module.__esModule ?
- function getDefault() { return module['default']; } :
- function getModuleExports() { return module; };
- __webpack_require__.d(getter, 'a', getter);
- return getter;
- };
-
- __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-
- __webpack_require__.p = "/dist/";
-
- return __webpack_require__(__webpack_require__.s = 5);
- })
- ([
- (function(module, exports, __webpack_require__) {
- "use strict";
- (function(process) {
- var md5 = __webpack_require__(7);
- var CryptoJS = __webpack_require__(10);
- var xml2json = __webpack_require__(11);
- var json2xml = __webpack_require__(14);
- function camSafeUrlEncode(str) {
- return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A');
- }
- function getObjectKeys(obj, forKey) {
- var list = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key);
- }
- }
- return list.sort(function (a, b) {
- a = a.toLowerCase();
- b = b.toLowerCase();
- return a === b ? 0 : a > b ? 1 : -1;
- });
- };
- var obj2str = function (obj) {
- var i, key, val;
- var list = [];
- var keyList = getObjectKeys(obj);
- for (i = 0; i < keyList.length; i++) {
- key = keyList[i];
- val = obj[key] === undefined || obj[key] === null ? '' : '' + obj[key];
- key = camSafeUrlEncode(key).toLowerCase();
- val = camSafeUrlEncode(val) || '';
- list.push(key + '=' + val);
- }
- return list.join('&');
- };
- var getAuth = function (opt) {
- opt = opt || {};
- var SecretId = opt.SecretId;
- var SecretKey = opt.SecretKey;
- var KeyTime = opt.KeyTime;
- var method = (opt.method || opt.Method || 'get').toLowerCase();
- var queryParams = clone(opt.Query || opt.params || {});
- var headers = clone(opt.Headers || opt.headers || {});
- var Key = opt.Key || '';
- var pathname;
- if (opt.UseRawKey) {
- pathname = opt.Pathname || opt.pathname || '/' + Key;
- } else {
- pathname = opt.Pathname || opt.pathname || Key;
- pathname.indexOf('/') !== 0 && (pathname = '/' + pathname);
- }
- if (!SecretId) throw new Error('missing param SecretId');
- if (!SecretKey) throw new Error('missing param SecretKey');
-
- var now = Math.round(getSkewTime(opt.SystemClockOffset) / 1000) - 1;
- var exp = now;
- var Expires = opt.Expires || opt.expires;
- if (Expires === undefined) {
- exp += 900;
- } else {
- exp += Expires * 1 || 0;
- }
-
- var qSignAlgorithm = 'sha1';
- var qAk = SecretId;
- var qSignTime = KeyTime || now + ';' + exp;
- var qKeyTime = KeyTime || now + ';' + exp;
- var qHeaderList = getObjectKeys(headers).join(';').toLowerCase();
- var qUrlParamList = getObjectKeys(queryParams).join(';').toLowerCase();
-
-
- var signKey = CryptoJS.HmacSHA1(qKeyTime, SecretKey).toString();
-
- var formatString = [method, pathname, util.obj2str(queryParams), util.obj2str(headers), ''].join('\n');
-
- var stringToSign = ['sha1', qSignTime, CryptoJS.SHA1(formatString).toString(), ''].join('\n');
-
- var qSignature = CryptoJS.HmacSHA1(stringToSign, signKey).toString();
-
- var authorization = ['q-sign-algorithm=' + qSignAlgorithm, 'q-ak=' + qAk, 'q-sign-time=' + qSignTime, 'q-key-time=' + qKeyTime, 'q-header-list=' + qHeaderList, 'q-url-param-list=' + qUrlParamList, 'q-signature=' + qSignature].join('&');
- return authorization;
- };
- var readIntBE = function (chunk, size, offset) {
- var bytes = size / 8;
- var buf = chunk.slice(offset, offset + bytes);
- new Uint8Array(buf).reverse();
- return new { 8: Uint8Array, 16: Uint16Array, 32: Uint32Array }[size](buf)[0];
- };
- var buf2str = function (chunk, start, end, isUtf8) {
- var buf = chunk.slice(start, end);
- var str = '';
- new Uint8Array(buf).forEach(function (charCode) {
- str += String.fromCharCode(charCode);
- });
- if (isUtf8) str = decodeURIComponent(escape(str));
- return str;
- };
- var parseSelectPayload = function (chunk) {
- var header = {};
- var body = buf2str(chunk);
- var result = { records: [] };
- while (chunk.byteLength) {
- var totalLength = readIntBE(chunk, 32, 0);
- var headerLength = readIntBE(chunk, 32, 4);
- var payloadRestLength = totalLength - headerLength - 16;
- var offset = 0;
- var content;
- chunk = chunk.slice(12);
-
- while (offset < headerLength) {
- var headerNameLength = readIntBE(chunk, 8, offset);
- var headerName = buf2str(chunk, offset + 1, offset + 1 + headerNameLength);
- var headerValueLength = readIntBE(chunk, 16, offset + headerNameLength + 2);
- var headerValue = buf2str(chunk, offset + headerNameLength + 4, offset + headerNameLength + 4 + headerValueLength);
- header[headerName] = headerValue;
- offset += headerNameLength + 4 + headerValueLength;
- }
- if (header[':event-type'] === 'Records') {
- content = buf2str(chunk, offset, offset + payloadRestLength, true);
- result.records.push(content);
- } else if (header[':event-type'] === 'Stats') {
- content = buf2str(chunk, offset, offset + payloadRestLength, true);
- result.stats = util.xml2json(content).Stats;
- } else if (header[':event-type'] === 'error') {
- var errCode = header[':error-code'];
- var errMessage = header[':error-message'];
- var err = new Error(errMessage);
- err.message = errMessage;
- err.name = err.code = errCode;
- result.error = err;
- } else if (['Progress', 'Continuation', 'End'].includes(header[':event-type'])) {
-
- }
- chunk = chunk.slice(offset + payloadRestLength + 4);
- }
- return {
- payload: result.records.join(''),
- body: body
- };
- };
- var getSourceParams = function (source) {
- var parser = this.options.CopySourceParser;
- if (parser) return parser(source);
- var m = source.match(/^([^.]+-\d+)\.cos(v6|-cdc)?\.([^.]+)\.myqcloud\.com\/(.+)$/);
- if (!m) return null;
- return { Bucket: m[1], Region: m[3], Key: m[4] };
- };
- var noop = function () {};
- var clearKey = function (obj) {
- var retObj = {};
- for (var key in obj) {
- if (obj.hasOwnProperty(key) && obj[key] !== undefined && obj[key] !== null) {
- retObj[key] = obj[key];
- }
- }
- return retObj;
- };
- var readAsBinaryString = function (blob, callback) {
- var readFun;
- var fr = new FileReader();
- if (FileReader.prototype.readAsBinaryString) {
- readFun = FileReader.prototype.readAsBinaryString;
- fr.onload = function () {
- callback(this.result);
- };
- } else if (FileReader.prototype.readAsArrayBuffer) {
-
- readFun = function (fileData) {
- var binary = "";
- var pt = this;
- var reader = new FileReader();
- reader.onload = function (e) {
- var bytes = new Uint8Array(reader.result);
- var length = bytes.byteLength;
- for (var i = 0; i < length; i++) {
- binary += String.fromCharCode(bytes[i]);
- }
- callback(binary);
- };
- reader.readAsArrayBuffer(fileData);
- };
- } else {
- console.error('FileReader not support readAsBinaryString');
- }
- readFun.call(fr, blob);
- };
- var fileSliceNeedCopy = function () {
- var compareVersion = function (a, b) {
- a = a.split('.');
- b = b.split('.');
- for (var i = 0; i < b.length; i++) {
- if (a[i] !== b[i]) {
- return parseInt(a[i]) > parseInt(b[i]) ? 1 : -1;
- }
- }
- return 0;
- };
- var check = function (ua) {
- var ChromeVersion = (ua.match(/Chrome\/([.\d]+)/) || [])[1];
- var QBCoreVersion = (ua.match(/QBCore\/([.\d]+)/) || [])[1];
- var QQBrowserVersion = (ua.match(/QQBrowser\/([.\d]+)/) || [])[1];
- var need = ChromeVersion && compareVersion(ChromeVersion, '53.0.2785.116') < 0 && QBCoreVersion && compareVersion(QBCoreVersion, '3.53.991.400') < 0 && QQBrowserVersion && compareVersion(QQBrowserVersion, '9.0.2524.400') <= 0 || false;
- return need;
- };
- return check(navigator && navigator.userAgent);
- }();
- var fileSlice = function (file, start, end, isUseToUpload, callback) {
- var blob;
- if (file.slice) {
- blob = file.slice(start, end);
- } else if (file.mozSlice) {
- blob = file.mozSlice(start, end);
- } else if (file.webkitSlice) {
- blob = file.webkitSlice(start, end);
- }
- if (isUseToUpload && fileSliceNeedCopy) {
- var reader = new FileReader();
- reader.onload = function (e) {
- blob = null;
- callback(new Blob([reader.result]));
- };
- reader.readAsArrayBuffer(blob);
- } else {
- callback(blob);
- }
- };
- var getBodyMd5 = function (UploadCheckContentMd5, Body, callback, onProgress) {
- callback = callback || noop;
- if (UploadCheckContentMd5) {
- if (typeof Body === 'string') {
- callback(util.md5(Body, true));
- } else if (Blob && Body instanceof Blob) {
- util.getFileMd5(Body, function (err, md5) {
- callback(md5);
- }, onProgress);
- } else {
- callback();
- }
- } else {
- callback();
- }
- };
- var md5ChunkSize = 1024 * 1024;
- var getFileMd5 = function (blob, callback, onProgress) {
- var size = blob.size;
- var loaded = 0;
- var md5ctx = md5.getCtx();
- var next = function (start) {
- if (start >= size) {
- var hash = md5ctx.digest('hex');
- callback(null, hash);
- return;
- }
- var end = Math.min(size, start + md5ChunkSize);
- util.fileSlice(blob, start, end, false, function (chunk) {
- readAsBinaryString(chunk, function (content) {
- chunk = null;
- md5ctx = md5ctx.update(content, true);
- loaded += content.length;
- content = null;
- if (onProgress) onProgress({ loaded: loaded, total: size, percent: Math.round(loaded / size * 10000) / 10000 });
- next(start + md5ChunkSize);
- });
- });
- };
- next(0);
- };
- function clone(obj) {
- return map(obj, function (v) {
- return typeof v === 'object' && v !== null ? clone(v) : v;
- });
- }
- function attr(obj, name, defaultValue) {
- return obj && name in obj ? obj[name] : defaultValue;
- }
- function extend(target, source) {
- each(source, function (val, key) {
- target[key] = source[key];
- });
- return target;
- }
- function isArray(arr) {
- return arr instanceof Array;
- }
- function isInArray(arr, item) {
- var flag = false;
- for (var i = 0; i < arr.length; i++) {
- if (item === arr[i]) {
- flag = true;
- break;
- }
- }
- return flag;
- }
- function makeArray(arr) {
- return isArray(arr) ? arr : [arr];
- }
- function each(obj, fn) {
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- fn(obj[i], i);
- }
- }
- }
- function map(obj, fn) {
- var o = isArray(obj) ? [] : {};
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- o[i] = fn(obj[i], i);
- }
- }
- return o;
- }
- function filter(obj, fn) {
- var iaArr = isArray(obj);
- var o = iaArr ? [] : {};
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- if (fn(obj[i], i)) {
- if (iaArr) {
- o.push(obj[i]);
- } else {
- o[i] = obj[i];
- }
- }
- }
- }
- return o;
- }
- var binaryBase64 = function (str) {
- var i,
- len,
- char,
- res = '';
- for (i = 0, len = str.length / 2; i < len; i++) {
- char = parseInt(str[i * 2] + str[i * 2 + 1], 16);
- res += String.fromCharCode(char);
- }
- return btoa(res);
- };
- var uuid = function () {
- var S4 = function () {
- return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);
- };
- return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4();
- };
- var hasMissingParams = function (apiName, params) {
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var Domain = this.options.Domain;
- var checkBucket = !Domain || Domain.indexOf('{Bucket}') > -1;
- var checkRegion = !Domain || Domain.indexOf('{Region}') > -1;
- if (apiName.indexOf('Bucket') > -1 || apiName === 'deleteMultipleObject' || apiName === 'multipartList' || apiName === 'listObjectVersions') {
- if (checkBucket && !Bucket) return 'Bucket';
- if (checkRegion && !Region) return 'Region';
- } else if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') {
- if (checkBucket && !Bucket) return 'Bucket';
- if (checkRegion && !Region) return 'Region';
- if (!Key) return 'Key';
- }
- return false;
- };
- var formatParams = function (apiName, params) {
-
- params = extend({}, params);
-
- if (apiName !== 'getAuth' && apiName !== 'getV4Auth' && apiName !== 'getObjectUrl') {
- var Headers = params.Headers || {};
- if (params && typeof params === 'object') {
- (function () {
- for (var key in params) {
- if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) {
- Headers[key] = params[key];
- }
- }
- })();
- var headerMap = {
-
- 'x-cos-mfa': 'MFA',
- 'Content-MD5': 'ContentMD5',
- 'Content-Length': 'ContentLength',
- 'Content-Type': 'ContentType',
- 'Expect': 'Expect',
- 'Expires': 'Expires',
- 'Cache-Control': 'CacheControl',
- 'Content-Disposition': 'ContentDisposition',
- 'Content-Encoding': 'ContentEncoding',
- 'Range': 'Range',
- 'If-Modified-Since': 'IfModifiedSince',
- 'If-Unmodified-Since': 'IfUnmodifiedSince',
- 'If-Match': 'IfMatch',
- 'If-None-Match': 'IfNoneMatch',
- 'x-cos-copy-source': 'CopySource',
- 'x-cos-copy-source-Range': 'CopySourceRange',
- 'x-cos-metadata-directive': 'MetadataDirective',
- 'x-cos-copy-source-If-Modified-Since': 'CopySourceIfModifiedSince',
- 'x-cos-copy-source-If-Unmodified-Since': 'CopySourceIfUnmodifiedSince',
- 'x-cos-copy-source-If-Match': 'CopySourceIfMatch',
- 'x-cos-copy-source-If-None-Match': 'CopySourceIfNoneMatch',
- 'x-cos-acl': 'ACL',
- 'x-cos-grant-read': 'GrantRead',
- 'x-cos-grant-write': 'GrantWrite',
- 'x-cos-grant-full-control': 'GrantFullControl',
- 'x-cos-grant-read-acp': 'GrantReadAcp',
- 'x-cos-grant-write-acp': 'GrantWriteAcp',
- 'x-cos-storage-class': 'StorageClass',
- 'x-cos-traffic-limit': 'TrafficLimit',
- 'x-cos-mime-limit': 'MimeLimit',
-
- 'x-cos-server-side-encryption-customer-algorithm': 'SSECustomerAlgorithm',
- 'x-cos-server-side-encryption-customer-key': 'SSECustomerKey',
- 'x-cos-server-side-encryption-customer-key-MD5': 'SSECustomerKeyMD5',
-
- 'x-cos-server-side-encryption': 'ServerSideEncryption',
- 'x-cos-server-side-encryption-cos-kms-key-id': 'SSEKMSKeyId',
- 'x-cos-server-side-encryption-context': 'SSEContext'
- };
- util.each(headerMap, function (paramKey, headerKey) {
- if (params[paramKey] !== undefined) {
- Headers[headerKey] = params[paramKey];
- }
- });
- params.Headers = clearKey(Headers);
- }
- }
- return params;
- };
- var apiWrapper = function (apiName, apiFn) {
- return function (params, callback) {
- var self = this;
-
- if (typeof params === 'function') {
- callback = params;
- params = {};
- }
-
- params = formatParams(apiName, params);
-
- var formatResult = function (result) {
- if (result && result.headers) {
- result.headers['x-cos-request-id'] && (result.RequestId = result.headers['x-cos-request-id']);
- result.headers['x-cos-version-id'] && (result.VersionId = result.headers['x-cos-version-id']);
- result.headers['x-cos-delete-marker'] && (result.DeleteMarker = result.headers['x-cos-delete-marker']);
- }
- return result;
- };
- var _callback = function (err, data) {
- callback && callback(formatResult(err), formatResult(data));
- };
- var checkParams = function () {
- if (apiName !== 'getService' && apiName !== 'abortUploadTask') {
-
- var missingResult = hasMissingParams.call(self, apiName, params);
- if (missingResult) {
- return 'missing param ' + missingResult;
- }
-
- if (params.Region) {
- if (self.options.CompatibilityMode) {
- if (!/^([a-z\d-.]+)$/.test(params.Region)) {
- return 'Region format error.';
- }
- } else {
- if (params.Region.indexOf('cos.') > -1) {
- return 'param Region should not be start with "cos."';
- } else if (!/^([a-z\d-]+)$/.test(params.Region)) {
- return 'Region format error.';
- }
- }
-
- if (!self.options.CompatibilityMode && params.Region.indexOf('-') === -1 && params.Region !== 'yfb' && params.Region !== 'default' && params.Region !== 'accelerate') {
- console.warn('warning: param Region format error, find help here: https://cloud.tencent.com/document/product/436/6224');
- }
- }
-
- if (params.Bucket) {
- if (!/^([a-z\d-]+)-(\d+)$/.test(params.Bucket)) {
- if (params.AppId) {
- params.Bucket = params.Bucket + '-' + params.AppId;
- } else if (self.options.AppId) {
- params.Bucket = params.Bucket + '-' + self.options.AppId;
- } else {
- return 'Bucket should format as "test-1250000000".';
- }
- }
- if (params.AppId) {
- console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g Bucket:"test-1250000000" ).');
- delete params.AppId;
- }
- }
-
- if (!self.options.UseRawKey && params.Key && params.Key.substr(0, 1) === '/') {
- params.Key = params.Key.substr(1);
- }
- }
- };
- var errMsg = checkParams();
- var isSync = apiName === 'getAuth' || apiName === 'getObjectUrl';
- if (window.Promise && !isSync && !callback) {
- return new Promise(function (resolve, reject) {
- callback = function (err, data) {
- err ? reject(err) : resolve(data);
- };
- if (errMsg) return _callback(util.error(new Error(errMsg)));
- apiFn.call(self, params, _callback);
- });
- } else {
- if (errMsg) return _callback(util.error(new Error(errMsg)));
- var res = apiFn.call(self, params, _callback);
- if (isSync) return res;
- }
- };
- };
- var throttleOnProgress = function (total, onProgress) {
- var self = this;
- var size0 = 0;
- var size1 = 0;
- var time0 = Date.now();
- var time1;
- var timer;
- function update() {
- timer = 0;
- if (onProgress && typeof onProgress === 'function') {
- time1 = Date.now();
- var speed = Math.max(0, Math.round((size1 - size0) / ((time1 - time0) / 1000) * 100) / 100) || 0;
- var percent;
- if (size1 === 0 && total === 0) {
- percent = 1;
- } else {
- percent = Math.floor(size1 / total * 100) / 100 || 0;
- }
- time0 = time1;
- size0 = size1;
- try {
- onProgress({ loaded: size1, total: total, speed: speed, percent: percent });
- } catch (e) {}
- }
- }
- return function (info, immediately) {
- if (info) {
- size1 = info.loaded;
- total = info.total;
- }
- if (immediately) {
- clearTimeout(timer);
- update();
- } else {
- if (timer) return;
- timer = setTimeout(update, self.options.ProgressInterval);
- }
- };
- };
- var getFileSize = function (api, params, callback) {
- var size;
- if (typeof params.Body === 'string') {
- params.Body = new Blob([params.Body], { type: 'text/plain' });
- } else if (params.Body instanceof ArrayBuffer) {
- params.Body = new Blob([params.Body]);
- }
- if (params.Body && (params.Body instanceof Blob || params.Body.toString() === '[object File]' || params.Body.toString() === '[object Blob]')) {
- size = params.Body.size;
- } else {
- callback(util.error(new Error('params body format error, Only allow File|Blob|String.')));
- return;
- }
- params.ContentLength = size;
- callback(null, size);
- };
- var getSkewTime = function (offset) {
- return Date.now() + (offset || 0);
- };
- var error = function (err, opt) {
- var sourceErr = err;
- err.message = err.message || null;
- if (typeof opt === 'string') {
- err.error = opt;
- err.message = opt;
- } else if (typeof opt === 'object' && opt !== null) {
- extend(err, opt);
- if (opt.code || opt.name) err.code = opt.code || opt.name;
- if (opt.message) err.message = opt.message;
- if (opt.stack) err.stack = opt.stack;
- }
- if (typeof Object.defineProperty === 'function') {
- Object.defineProperty(err, 'name', { writable: true, enumerable: false });
- Object.defineProperty(err, 'message', { enumerable: true });
- }
- err.name = opt && opt.name || err.name || err.code || 'Error';
- if (!err.code) err.code = err.name;
- if (!err.error) err.error = clone(sourceErr);
- return err;
- };
- var isNode = function () {
- return typeof window !== 'object' && typeof process === 'object' && "function" === 'function';
- };
- var isCIHost = function (url) {
- return (/^https?:\/\/([^/]+\.)?ci\.[^/]+/.test(url)
- );
- };
- var util = {
- noop: noop,
- formatParams: formatParams,
- apiWrapper: apiWrapper,
- xml2json: xml2json,
- json2xml: json2xml,
- md5: md5,
- clearKey: clearKey,
- fileSlice: fileSlice,
- getBodyMd5: getBodyMd5,
- getFileMd5: getFileMd5,
- binaryBase64: binaryBase64,
- extend: extend,
- isArray: isArray,
- isInArray: isInArray,
- makeArray: makeArray,
- each: each,
- map: map,
- filter: filter,
- clone: clone,
- attr: attr,
- uuid: uuid,
- camSafeUrlEncode: camSafeUrlEncode,
- throttleOnProgress: throttleOnProgress,
- getFileSize: getFileSize,
- getSkewTime: getSkewTime,
- error: error,
- obj2str: obj2str,
- getAuth: getAuth,
- parseSelectPayload: parseSelectPayload,
- getSourceParams: getSourceParams,
- isBrowser: true,
- isNode: isNode,
- isCIHost: isCIHost
- };
- module.exports = util;
- }.call(exports, __webpack_require__(1)))
- }),
- (function(module, exports) {
- var process = module.exports = {};
- var cachedSetTimeout;
- var cachedClearTimeout;
- function defaultSetTimout() {
- throw new Error('setTimeout has not been defined');
- }
- function defaultClearTimeout () {
- throw new Error('clearTimeout has not been defined');
- }
- (function () {
- try {
- if (typeof setTimeout === 'function') {
- cachedSetTimeout = setTimeout;
- } else {
- cachedSetTimeout = defaultSetTimout;
- }
- } catch (e) {
- cachedSetTimeout = defaultSetTimout;
- }
- try {
- if (typeof clearTimeout === 'function') {
- cachedClearTimeout = clearTimeout;
- } else {
- cachedClearTimeout = defaultClearTimeout;
- }
- } catch (e) {
- cachedClearTimeout = defaultClearTimeout;
- }
- } ())
- function runTimeout(fun) {
- if (cachedSetTimeout === setTimeout) {
-
- return setTimeout(fun, 0);
- }
-
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
- cachedSetTimeout = setTimeout;
- return setTimeout(fun, 0);
- }
- try {
-
- return cachedSetTimeout(fun, 0);
- } catch(e){
- try {
-
- return cachedSetTimeout.call(null, fun, 0);
- } catch(e){
-
- return cachedSetTimeout.call(this, fun, 0);
- }
- }
- }
- function runClearTimeout(marker) {
- if (cachedClearTimeout === clearTimeout) {
-
- return clearTimeout(marker);
- }
-
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
- cachedClearTimeout = clearTimeout;
- return clearTimeout(marker);
- }
- try {
-
- return cachedClearTimeout(marker);
- } catch (e){
- try {
-
- return cachedClearTimeout.call(null, marker);
- } catch (e){
-
-
- return cachedClearTimeout.call(this, marker);
- }
- }
- }
- var queue = [];
- var draining = false;
- var currentQueue;
- var queueIndex = -1;
- function cleanUpNextTick() {
- if (!draining || !currentQueue) {
- return;
- }
- draining = false;
- if (currentQueue.length) {
- queue = currentQueue.concat(queue);
- } else {
- queueIndex = -1;
- }
- if (queue.length) {
- drainQueue();
- }
- }
- function drainQueue() {
- if (draining) {
- return;
- }
- var timeout = runTimeout(cleanUpNextTick);
- draining = true;
- var len = queue.length;
- while(len) {
- currentQueue = queue;
- queue = [];
- while (++queueIndex < len) {
- if (currentQueue) {
- currentQueue[queueIndex].run();
- }
- }
- queueIndex = -1;
- len = queue.length;
- }
- currentQueue = null;
- draining = false;
- runClearTimeout(timeout);
- }
- process.nextTick = function (fun) {
- var args = new Array(arguments.length - 1);
- if (arguments.length > 1) {
- for (var i = 1; i < arguments.length; i++) {
- args[i - 1] = arguments[i];
- }
- }
- queue.push(new Item(fun, args));
- if (queue.length === 1 && !draining) {
- runTimeout(drainQueue);
- }
- };
- function Item(fun, array) {
- this.fun = fun;
- this.array = array;
- }
- Item.prototype.run = function () {
- this.fun.apply(null, this.array);
- };
- process.title = 'browser';
- process.browser = true;
- process.env = {};
- process.argv = [];
- process.version = '';
- process.versions = {};
- function noop() {}
- process.on = noop;
- process.addListener = noop;
- process.once = noop;
- process.off = noop;
- process.removeListener = noop;
- process.removeAllListeners = noop;
- process.emit = noop;
- process.prependListener = noop;
- process.prependOnceListener = noop;
- process.listeners = function (name) { return [] }
- process.binding = function (name) {
- throw new Error('process.binding is not supported');
- };
- process.cwd = function () { return '/' };
- process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
- };
- process.umask = function() { return 0; };
- }),
- (function(module, exports) {
- function copy(src,dest){
- for(var p in src){
- dest[p] = src[p];
- }
- }
- function _extends(Class,Super){
- var pt = Class.prototype;
- if(Object.create){
- var ppt = Object.create(Super.prototype)
- pt.__proto__ = ppt;
- }
- if(!(pt instanceof Super)){
- function t(){};
- t.prototype = Super.prototype;
- t = new t();
- copy(pt,t);
- Class.prototype = pt = t;
- }
- if(pt.constructor != Class){
- if(typeof Class != 'function'){
- console.error("unknow Class:"+Class)
- }
- pt.constructor = Class
- }
- }
- var htmlns = 'http://www.w3.org/1999/xhtml' ;
- var NodeType = {}
- var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;
- var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;
- var TEXT_NODE = NodeType.TEXT_NODE = 3;
- var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;
- var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;
- var ENTITY_NODE = NodeType.ENTITY_NODE = 6;
- var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
- var COMMENT_NODE = NodeType.COMMENT_NODE = 8;
- var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;
- var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;
- var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;
- var NOTATION_NODE = NodeType.NOTATION_NODE = 12;
- var ExceptionCode = {}
- var ExceptionMessage = {};
- var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1);
- var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
- var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
- var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
- var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
- var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
- var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
- var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
- var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9);
- var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10);
- var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11);
- var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12);
- var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13);
- var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14);
- var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15);
- function DOMException(code, message) {
- if(message instanceof Error){
- var error = message;
- }else{
- error = this;
- Error.call(this, ExceptionMessage[code]);
- this.message = ExceptionMessage[code];
- if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
- }
- error.code = code;
- if(message) this.message = this.message + ": " + message;
- return error;
- };
- DOMException.prototype = Error.prototype;
- copy(ExceptionCode,DOMException)
- function NodeList() {
- };
- NodeList.prototype = {
-
- length:0,
-
- item: function(index) {
- return this[index] || null;
- },
- toString:function(isHTML,nodeFilter){
- for(var buf = [], i = 0;i<this.length;i++){
- serializeToString(this[i],buf,isHTML,nodeFilter);
- }
- return buf.join('');
- }
- };
- function LiveNodeList(node,refresh){
- this._node = node;
- this._refresh = refresh
- _updateLiveList(this);
- }
- function _updateLiveList(list){
- var inc = list._node._inc || list._node.ownerDocument._inc;
- if(list._inc != inc){
- var ls = list._refresh(list._node);
-
- __set__(list,'length',ls.length);
- copy(ls,list);
- list._inc = inc;
- }
- }
- LiveNodeList.prototype.item = function(i){
- _updateLiveList(this);
- return this[i];
- }
- _extends(LiveNodeList,NodeList);
- function NamedNodeMap() {
- };
- function _findNodeIndex(list,node){
- var i = list.length;
- while(i--){
- if(list[i] === node){return i}
- }
- }
- function _addNamedNode(el,list,newAttr,oldAttr){
- if(oldAttr){
- list[_findNodeIndex(list,oldAttr)] = newAttr;
- }else{
- list[list.length++] = newAttr;
- }
- if(el){
- newAttr.ownerElement = el;
- var doc = el.ownerDocument;
- if(doc){
- oldAttr && _onRemoveAttribute(doc,el,oldAttr);
- _onAddAttribute(doc,el,newAttr);
- }
- }
- }
- function _removeNamedNode(el,list,attr){
-
- var i = _findNodeIndex(list,attr);
- if(i>=0){
- var lastIndex = list.length-1
- while(i<lastIndex){
- list[i] = list[++i]
- }
- list.length = lastIndex;
- if(el){
- var doc = el.ownerDocument;
- if(doc){
- _onRemoveAttribute(doc,el,attr);
- attr.ownerElement = null;
- }
- }
- }else{
- throw DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
- }
- }
- NamedNodeMap.prototype = {
- length:0,
- item:NodeList.prototype.item,
- getNamedItem: function(key) {
-
- var i = this.length;
- while(i--){
- var attr = this[i];
-
- if(attr.nodeName == key){
- return attr;
- }
- }
- },
- setNamedItem: function(attr) {
- var el = attr.ownerElement;
- if(el && el!=this._ownerElement){
- throw new DOMException(INUSE_ATTRIBUTE_ERR);
- }
- var oldAttr = this.getNamedItem(attr.nodeName);
- _addNamedNode(this._ownerElement,this,attr,oldAttr);
- return oldAttr;
- },
-
- setNamedItemNS: function(attr) {
- var el = attr.ownerElement, oldAttr;
- if(el && el!=this._ownerElement){
- throw new DOMException(INUSE_ATTRIBUTE_ERR);
- }
- oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
- _addNamedNode(this._ownerElement,this,attr,oldAttr);
- return oldAttr;
- },
-
- removeNamedItem: function(key) {
- var attr = this.getNamedItem(key);
- _removeNamedNode(this._ownerElement,this,attr);
- return attr;
-
-
- },
-
-
- removeNamedItemNS:function(namespaceURI,localName){
- var attr = this.getNamedItemNS(namespaceURI,localName);
- _removeNamedNode(this._ownerElement,this,attr);
- return attr;
- },
- getNamedItemNS: function(namespaceURI, localName) {
- var i = this.length;
- while(i--){
- var node = this[i];
- if(node.localName == localName && node.namespaceURI == namespaceURI){
- return node;
- }
- }
- return null;
- }
- };
- function DOMImplementation( features) {
- this._features = {};
- if (features) {
- for (var feature in features) {
- this._features = features[feature];
- }
- }
- };
- DOMImplementation.prototype = {
- hasFeature: function( feature, version) {
- var versions = this._features[feature.toLowerCase()];
- if (versions && (!version || version in versions)) {
- return true;
- } else {
- return false;
- }
- },
-
- createDocument:function(namespaceURI, qualifiedName, doctype){
- var doc = new Document();
- doc.implementation = this;
- doc.childNodes = new NodeList();
- doc.doctype = doctype;
- if(doctype){
- doc.appendChild(doctype);
- }
- if(qualifiedName){
- var root = doc.createElementNS(namespaceURI,qualifiedName);
- doc.appendChild(root);
- }
- return doc;
- },
-
- createDocumentType:function(qualifiedName, publicId, systemId){
- var node = new DocumentType();
- node.name = qualifiedName;
- node.nodeName = qualifiedName;
- node.publicId = publicId;
- node.systemId = systemId;
-
-
-
-
-
-
- return node;
- }
- };
- function Node() {
- };
- Node.prototype = {
- firstChild : null,
- lastChild : null,
- previousSibling : null,
- nextSibling : null,
- attributes : null,
- parentNode : null,
- childNodes : null,
- ownerDocument : null,
- nodeValue : null,
- namespaceURI : null,
- prefix : null,
- localName : null,
-
- insertBefore:function(newChild, refChild){
- return _insertBefore(this,newChild,refChild);
- },
- replaceChild:function(newChild, oldChild){
- this.insertBefore(newChild,oldChild);
- if(oldChild){
- this.removeChild(oldChild);
- }
- },
- removeChild:function(oldChild){
- return _removeChild(this,oldChild);
- },
- appendChild:function(newChild){
- return this.insertBefore(newChild,null);
- },
- hasChildNodes:function(){
- return this.firstChild != null;
- },
- cloneNode:function(deep){
- return cloneNode(this.ownerDocument||this,this,deep);
- },
-
- normalize:function(){
- var child = this.firstChild;
- while(child){
- var next = child.nextSibling;
- if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
- this.removeChild(next);
- child.appendData(next.data);
- }else{
- child.normalize();
- child = next;
- }
- }
- },
-
- isSupported:function(feature, version){
- return this.ownerDocument.implementation.hasFeature(feature,version);
- },
-
- hasAttributes:function(){
- return this.attributes.length>0;
- },
- lookupPrefix:function(namespaceURI){
- var el = this;
- while(el){
- var map = el._nsMap;
-
- if(map){
- for(var n in map){
- if(map[n] == namespaceURI){
- return n;
- }
- }
- }
- el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
- }
- return null;
- },
-
- lookupNamespaceURI:function(prefix){
- var el = this;
- while(el){
- var map = el._nsMap;
-
- if(map){
- if(prefix in map){
- return map[prefix] ;
- }
- }
- el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
- }
- return null;
- },
-
- isDefaultNamespace:function(namespaceURI){
- var prefix = this.lookupPrefix(namespaceURI);
- return prefix == null;
- }
- };
- function _xmlEncoder(c){
- return c == '<' && '<' ||
- c == '>' && '>' ||
- c == '&' && '&' ||
- c == '"' && '"' ||
- '&#'+c.charCodeAt()+';'
- }
- copy(NodeType,Node);
- copy(NodeType,Node.prototype);
- function _visitNode(node,callback){
- if(callback(node)){
- return true;
- }
- if(node = node.firstChild){
- do{
- if(_visitNode(node,callback)){return true}
- }while(node=node.nextSibling)
- }
- }
- function Document(){
- }
- function _onAddAttribute(doc,el,newAttr){
- doc && doc._inc++;
- var ns = newAttr.namespaceURI ;
- if(ns == 'http://www.w3.org/2000/xmlns/'){
-
- el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
- }
- }
- function _onRemoveAttribute(doc,el,newAttr,remove){
- doc && doc._inc++;
- var ns = newAttr.namespaceURI ;
- if(ns == 'http://www.w3.org/2000/xmlns/'){
-
- delete el._nsMap[newAttr.prefix?newAttr.localName:'']
- }
- }
- function _onUpdateChild(doc,el,newChild){
- if(doc && doc._inc){
- doc._inc++;
-
- var cs = el.childNodes;
- if(newChild){
- cs[cs.length++] = newChild;
- }else{
-
- var child = el.firstChild;
- var i = 0;
- while(child){
- cs[i++] = child;
- child =child.nextSibling;
- }
- cs.length = i;
- }
- }
- }
- function _removeChild(parentNode,child){
- var previous = child.previousSibling;
- var next = child.nextSibling;
- if(previous){
- previous.nextSibling = next;
- }else{
- parentNode.firstChild = next
- }
- if(next){
- next.previousSibling = previous;
- }else{
- parentNode.lastChild = previous;
- }
- _onUpdateChild(parentNode.ownerDocument,parentNode);
- return child;
- }
- function _insertBefore(parentNode,newChild,nextChild){
- var cp = newChild.parentNode;
- if(cp){
- cp.removeChild(newChild);
- }
- if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
- var newFirst = newChild.firstChild;
- if (newFirst == null) {
- return newChild;
- }
- var newLast = newChild.lastChild;
- }else{
- newFirst = newLast = newChild;
- }
- var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
- newFirst.previousSibling = pre;
- newLast.nextSibling = nextChild;
-
-
- if(pre){
- pre.nextSibling = newFirst;
- }else{
- parentNode.firstChild = newFirst;
- }
- if(nextChild == null){
- parentNode.lastChild = newLast;
- }else{
- nextChild.previousSibling = newLast;
- }
- do{
- newFirst.parentNode = parentNode;
- }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
- _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
-
- if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
- newChild.firstChild = newChild.lastChild = null;
- }
- return newChild;
- }
- function _appendSingleChild(parentNode,newChild){
- var cp = newChild.parentNode;
- if(cp){
- var pre = parentNode.lastChild;
- cp.removeChild(newChild);
- var pre = parentNode.lastChild;
- }
- var pre = parentNode.lastChild;
- newChild.parentNode = parentNode;
- newChild.previousSibling = pre;
- newChild.nextSibling = null;
- if(pre){
- pre.nextSibling = newChild;
- }else{
- parentNode.firstChild = newChild;
- }
- parentNode.lastChild = newChild;
- _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
- return newChild;
-
- }
- Document.prototype = {
-
- nodeName : '#document',
- nodeType : DOCUMENT_NODE,
- doctype : null,
- documentElement : null,
- _inc : 1,
-
- insertBefore : function(newChild, refChild){
- if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
- var child = newChild.firstChild;
- while(child){
- var next = child.nextSibling;
- this.insertBefore(child,refChild);
- child = next;
- }
- return newChild;
- }
- if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
- this.documentElement = newChild;
- }
-
- return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
- },
- removeChild : function(oldChild){
- if(this.documentElement == oldChild){
- this.documentElement = null;
- }
- return _removeChild(this,oldChild);
- },
-
- importNode : function(importedNode,deep){
- return importNode(this,importedNode,deep);
- },
-
- getElementById : function(id){
- var rtv = null;
- _visitNode(this.documentElement,function(node){
- if(node.nodeType == ELEMENT_NODE){
- if(node.getAttribute('id') == id){
- rtv = node;
- return true;
- }
- }
- })
- return rtv;
- },
-
-
- createElement : function(tagName){
- var node = new Element();
- node.ownerDocument = this;
- node.nodeName = tagName;
- node.tagName = tagName;
- node.childNodes = new NodeList();
- var attrs = node.attributes = new NamedNodeMap();
- attrs._ownerElement = node;
- return node;
- },
- createDocumentFragment : function(){
- var node = new DocumentFragment();
- node.ownerDocument = this;
- node.childNodes = new NodeList();
- return node;
- },
- createTextNode : function(data){
- var node = new Text();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createComment : function(data){
- var node = new Comment();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createCDATASection : function(data){
- var node = new CDATASection();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createProcessingInstruction : function(target,data){
- var node = new ProcessingInstruction();
- node.ownerDocument = this;
- node.tagName = node.target = target;
- node.nodeValue= node.data = data;
- return node;
- },
- createAttribute : function(name){
- var node = new Attr();
- node.ownerDocument = this;
- node.name = name;
- node.nodeName = name;
- node.localName = name;
- node.specified = true;
- return node;
- },
- createEntityReference : function(name){
- var node = new EntityReference();
- node.ownerDocument = this;
- node.nodeName = name;
- return node;
- },
-
- createElementNS : function(namespaceURI,qualifiedName){
- var node = new Element();
- var pl = qualifiedName.split(':');
- var attrs = node.attributes = new NamedNodeMap();
- node.childNodes = new NodeList();
- node.ownerDocument = this;
- node.nodeName = qualifiedName;
- node.tagName = qualifiedName;
- node.namespaceURI = namespaceURI;
- if(pl.length == 2){
- node.prefix = pl[0];
- node.localName = pl[1];
- }else{
-
- node.localName = qualifiedName;
- }
- attrs._ownerElement = node;
- return node;
- },
-
- createAttributeNS : function(namespaceURI,qualifiedName){
- var node = new Attr();
- var pl = qualifiedName.split(':');
- node.ownerDocument = this;
- node.nodeName = qualifiedName;
- node.name = qualifiedName;
- node.namespaceURI = namespaceURI;
- node.specified = true;
- if(pl.length == 2){
- node.prefix = pl[0];
- node.localName = pl[1];
- }else{
-
- node.localName = qualifiedName;
- }
- return node;
- }
- };
- _extends(Document,Node);
- function Element() {
- this._nsMap = {};
- };
- Element.prototype = {
- nodeType : ELEMENT_NODE,
- hasAttribute : function(name){
- return this.getAttributeNode(name)!=null;
- },
- getAttribute : function(name){
- var attr = this.getAttributeNode(name);
- return attr && attr.value || '';
- },
- getAttributeNode : function(name){
- return this.attributes.getNamedItem(name);
- },
- setAttribute : function(name, value){
- var attr = this.ownerDocument.createAttribute(name);
- attr.value = attr.nodeValue = "" + value;
- this.setAttributeNode(attr)
- },
- removeAttribute : function(name){
- var attr = this.getAttributeNode(name)
- attr && this.removeAttributeNode(attr);
- },
-
-
- appendChild:function(newChild){
- if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
- return this.insertBefore(newChild,null);
- }else{
- return _appendSingleChild(this,newChild);
- }
- },
- setAttributeNode : function(newAttr){
- return this.attributes.setNamedItem(newAttr);
- },
- setAttributeNodeNS : function(newAttr){
- return this.attributes.setNamedItemNS(newAttr);
- },
- removeAttributeNode : function(oldAttr){
-
- return this.attributes.removeNamedItem(oldAttr.nodeName);
- },
-
- removeAttributeNS : function(namespaceURI, localName){
- var old = this.getAttributeNodeNS(namespaceURI, localName);
- old && this.removeAttributeNode(old);
- },
-
- hasAttributeNS : function(namespaceURI, localName){
- return this.getAttributeNodeNS(namespaceURI, localName)!=null;
- },
- getAttributeNS : function(namespaceURI, localName){
- var attr = this.getAttributeNodeNS(namespaceURI, localName);
- return attr && attr.value || '';
- },
- setAttributeNS : function(namespaceURI, qualifiedName, value){
- var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
- attr.value = attr.nodeValue = "" + value;
- this.setAttributeNode(attr)
- },
- getAttributeNodeNS : function(namespaceURI, localName){
- return this.attributes.getNamedItemNS(namespaceURI, localName);
- },
-
- getElementsByTagName : function(tagName){
- return new LiveNodeList(this,function(base){
- var ls = [];
- _visitNode(base,function(node){
- if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
- ls.push(node);
- }
- });
- return ls;
- });
- },
- getElementsByTagNameNS : function(namespaceURI, localName){
- return new LiveNodeList(this,function(base){
- var ls = [];
- _visitNode(base,function(node){
- if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
- ls.push(node);
- }
- });
- return ls;
-
- });
- }
- };
- Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
- Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
- _extends(Element,Node);
- function Attr() {
- };
- Attr.prototype.nodeType = ATTRIBUTE_NODE;
- _extends(Attr,Node);
- function CharacterData() {
- };
- CharacterData.prototype = {
- data : '',
- substringData : function(offset, count) {
- return this.data.substring(offset, offset+count);
- },
- appendData: function(text) {
- text = this.data+text;
- this.nodeValue = this.data = text;
- this.length = text.length;
- },
- insertData: function(offset,text) {
- this.replaceData(offset,0,text);
-
- },
- appendChild:function(newChild){
- throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
- },
- deleteData: function(offset, count) {
- this.replaceData(offset,count,"");
- },
- replaceData: function(offset, count, text) {
- var start = this.data.substring(0,offset);
- var end = this.data.substring(offset+count);
- text = start + text + end;
- this.nodeValue = this.data = text;
- this.length = text.length;
- }
- }
- _extends(CharacterData,Node);
- function Text() {
- };
- Text.prototype = {
- nodeName : "#text",
- nodeType : TEXT_NODE,
- splitText : function(offset) {
- var text = this.data;
- var newText = text.substring(offset);
- text = text.substring(0, offset);
- this.data = this.nodeValue = text;
- this.length = text.length;
- var newNode = this.ownerDocument.createTextNode(newText);
- if(this.parentNode){
- this.parentNode.insertBefore(newNode, this.nextSibling);
- }
- return newNode;
- }
- }
- _extends(Text,CharacterData);
- function Comment() {
- };
- Comment.prototype = {
- nodeName : "#comment",
- nodeType : COMMENT_NODE
- }
- _extends(Comment,CharacterData);
- function CDATASection() {
- };
- CDATASection.prototype = {
- nodeName : "#cdata-section",
- nodeType : CDATA_SECTION_NODE
- }
- _extends(CDATASection,CharacterData);
- function DocumentType() {
- };
- DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
- _extends(DocumentType,Node);
- function Notation() {
- };
- Notation.prototype.nodeType = NOTATION_NODE;
- _extends(Notation,Node);
- function Entity() {
- };
- Entity.prototype.nodeType = ENTITY_NODE;
- _extends(Entity,Node);
- function EntityReference() {
- };
- EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
- _extends(EntityReference,Node);
- function DocumentFragment() {
- };
- DocumentFragment.prototype.nodeName = "#document-fragment";
- DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;
- _extends(DocumentFragment,Node);
- function ProcessingInstruction() {
- }
- ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
- _extends(ProcessingInstruction,Node);
- function XMLSerializer(){}
- XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){
- return nodeSerializeToString.call(node,isHtml,nodeFilter);
- }
- Node.prototype.toString = nodeSerializeToString;
- function nodeSerializeToString(isHtml,nodeFilter){
- var buf = [];
- var refNode = this.nodeType == 9?this.documentElement:this;
- var prefix = refNode.prefix;
- var uri = refNode.namespaceURI;
-
- if(uri && prefix == null){
-
- var prefix = refNode.lookupPrefix(uri);
- if(prefix == null){
-
- var visibleNamespaces=[
- {namespace:uri,prefix:null}
-
- ]
- }
- }
- serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
-
- return buf.join('');
- }
- function needNamespaceDefine(node,isHTML, visibleNamespaces) {
- var prefix = node.prefix||'';
- var uri = node.namespaceURI;
- if (!prefix && !uri){
- return false;
- }
- if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace"
- || uri == 'http://www.w3.org/2000/xmlns/'){
- return false;
- }
-
- var i = visibleNamespaces.length
-
- while (i--) {
- var ns = visibleNamespaces[i];
-
-
- if (ns.prefix == prefix){
- return ns.namespace != uri;
- }
- }
-
-
-
-
-
-
- return true;
- }
- function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
- if(nodeFilter){
- node = nodeFilter(node);
- if(node){
- if(typeof node == 'string'){
- buf.push(node);
- return;
- }
- }else{
- return;
- }
-
- }
- switch(node.nodeType){
- case ELEMENT_NODE:
- if (!visibleNamespaces) visibleNamespaces = [];
- var startVisibleNamespaces = visibleNamespaces.length;
- var attrs = node.attributes;
- var len = attrs.length;
- var child = node.firstChild;
- var nodeName = node.tagName;
-
- isHTML = (htmlns === node.namespaceURI) ||isHTML
- buf.push('<',nodeName);
-
-
-
- for(var i=0;i<len;i++){
-
- var attr = attrs.item(i);
- if (attr.prefix == 'xmlns') {
- visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
- }else if(attr.nodeName == 'xmlns'){
- visibleNamespaces.push({ prefix: '', namespace: attr.value });
- }
- }
- for(var i=0;i<len;i++){
- var attr = attrs.item(i);
- if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
- var prefix = attr.prefix||'';
- var uri = attr.namespaceURI;
- var ns = prefix ? ' xmlns:' + prefix : " xmlns";
- buf.push(ns, '="' , uri , '"');
- visibleNamespaces.push({ prefix: prefix, namespace:uri });
- }
- serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
- }
-
- if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
- var prefix = node.prefix||'';
- var uri = node.namespaceURI;
- var ns = prefix ? ' xmlns:' + prefix : " xmlns";
- buf.push(ns, '="' , uri , '"');
- visibleNamespaces.push({ prefix: prefix, namespace:uri });
- }
-
- if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
- buf.push('>');
-
- if(isHTML && /^script$/i.test(nodeName)){
- while(child){
- if(child.data){
- buf.push(child.data);
- }else{
- serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
- }
- child = child.nextSibling;
- }
- }else
- {
- while(child){
- serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
- child = child.nextSibling;
- }
- }
- buf.push('</',nodeName,'>');
- }else{
- buf.push('/>');
- }
-
-
- return;
- case DOCUMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- var child = node.firstChild;
- while(child){
- serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
- child = child.nextSibling;
- }
- return;
- case ATTRIBUTE_NODE:
- return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
- case TEXT_NODE:
- return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
- case CDATA_SECTION_NODE:
- return buf.push( '<![CDATA[',node.data,']]>');
- case COMMENT_NODE:
- return buf.push( "<!--",node.data,"-->");
- case DOCUMENT_TYPE_NODE:
- var pubid = node.publicId;
- var sysid = node.systemId;
- buf.push('<!DOCTYPE ',node.name);
- if(pubid){
- buf.push(' PUBLIC "',pubid);
- if (sysid && sysid!='.') {
- buf.push( '" "',sysid);
- }
- buf.push('">');
- }else if(sysid && sysid!='.'){
- buf.push(' SYSTEM "',sysid,'">');
- }else{
- var sub = node.internalSubset;
- if(sub){
- buf.push(" [",sub,"]");
- }
- buf.push(">");
- }
- return;
- case PROCESSING_INSTRUCTION_NODE:
- return buf.push( "<?",node.target," ",node.data,"?>");
- case ENTITY_REFERENCE_NODE:
- return buf.push( '&',node.nodeName,';');
-
-
- default:
- buf.push('??',node.nodeName);
- }
- }
- function importNode(doc,node,deep){
- var node2;
- switch (node.nodeType) {
- case ELEMENT_NODE:
- node2 = node.cloneNode(false);
- node2.ownerDocument = doc;
-
-
-
-
-
- case DOCUMENT_FRAGMENT_NODE:
- break;
- case ATTRIBUTE_NODE:
- deep = true;
- break;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- if(!node2){
- node2 = node.cloneNode(false);
- }
- node2.ownerDocument = doc;
- node2.parentNode = null;
- if(deep){
- var child = node.firstChild;
- while(child){
- node2.appendChild(importNode(doc,child,deep));
- child = child.nextSibling;
- }
- }
- return node2;
- }
- function cloneNode(doc,node,deep){
- var node2 = new node.constructor();
- for(var n in node){
- var v = node[n];
- if(typeof v != 'object' ){
- if(v != node2[n]){
- node2[n] = v;
- }
- }
- }
- if(node.childNodes){
- node2.childNodes = new NodeList();
- }
- node2.ownerDocument = doc;
- switch (node2.nodeType) {
- case ELEMENT_NODE:
- var attrs = node.attributes;
- var attrs2 = node2.attributes = new NamedNodeMap();
- var len = attrs.length
- attrs2._ownerElement = node2;
- for(var i=0;i<len;i++){
- node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
- }
- break;;
- case ATTRIBUTE_NODE:
- deep = true;
- }
- if(deep){
- var child = node.firstChild;
- while(child){
- node2.appendChild(cloneNode(doc,child,deep));
- child = child.nextSibling;
- }
- }
- return node2;
- }
- function __set__(object,key,value){
- object[key] = value
- }
- try{
- if(Object.defineProperty){
- Object.defineProperty(LiveNodeList.prototype,'length',{
- get:function(){
- _updateLiveList(this);
- return this.$$length;
- }
- });
- Object.defineProperty(Node.prototype,'textContent',{
- get:function(){
- return getTextContent(this);
- },
- set:function(data){
- switch(this.nodeType){
- case ELEMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- while(this.firstChild){
- this.removeChild(this.firstChild);
- }
- if(data || String(data)){
- this.appendChild(this.ownerDocument.createTextNode(data));
- }
- break;
- default:
-
- this.data = data;
- this.value = data;
- this.nodeValue = data;
- }
- }
- })
-
- function getTextContent(node){
- switch(node.nodeType){
- case ELEMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- var buf = [];
- node = node.firstChild;
- while(node){
- if(node.nodeType!==7 && node.nodeType !==8){
- buf.push(getTextContent(node));
- }
- node = node.nextSibling;
- }
- return buf.join('');
- default:
- return node.nodeValue;
- }
- }
- __set__ = function(object,key,value){
-
- object['$$'+key] = value
- }
- }
- }catch(e){
- }
- exports.DOMImplementation = DOMImplementation;
- exports.XMLSerializer = XMLSerializer;
- }),
- (function(module, exports) {
- var initEvent = function (cos) {
- var listeners = {};
- var getList = function (action) {
- !listeners[action] && (listeners[action] = []);
- return listeners[action];
- };
- cos.on = function (action, callback) {
- if (action === 'task-list-update') {
- console.warn('warning: Event "' + action + '" has been deprecated. Please use "list-update" instead.');
- }
- getList(action).push(callback);
- };
- cos.off = function (action, callback) {
- var list = getList(action);
- for (var i = list.length - 1; i >= 0; i--) {
- callback === list[i] && list.splice(i, 1);
- }
- };
- cos.emit = function (action, data) {
- var list = getList(action).map(function (cb) {
- return cb;
- });
- for (var i = 0; i < list.length; i++) {
- list[i](data);
- }
- };
- };
- var EventProxy = function () {
- initEvent(this);
- };
- module.exports.init = initEvent;
- module.exports.EventProxy = EventProxy;
- }),
- (function(module, exports, __webpack_require__) {
- var util = __webpack_require__(0);
- var cacheKey = 'cos_sdk_upload_cache';
- var expires = 30 * 24 * 3600;
- var cache;
- var timer;
- var getCache = function () {
- try {
- var val = JSON.parse(localStorage.getItem(cacheKey));
- } catch (e) {}
- if (!val) val = [];
- cache = val;
- };
- var setCache = function () {
- try {
- localStorage.setItem(cacheKey, JSON.stringify(cache));
- } catch (e) {}
- };
- var init = function () {
- if (cache) return;
- getCache.call(this);
-
- var changed = false;
- var now = Math.round(Date.now() / 1000);
- for (var i = cache.length - 1; i >= 0; i--) {
- var mtime = cache[i][2];
- if (!mtime || mtime + expires < now) {
- cache.splice(i, 1);
- changed = true;
- }
- }
- changed && setCache();
- };
- var save = function () {
- if (timer) return;
- timer = setTimeout(function () {
- setCache();
- timer = null;
- }, 400);
- };
- var mod = {
- using: {},
-
- setUsing: function (uuid) {
- mod.using[uuid] = true;
- },
-
- removeUsing: function (uuid) {
- delete mod.using[uuid];
- },
-
- getFileId: function (file, ChunkSize, Bucket, Key) {
- if (file.name && file.size && file.lastModifiedDate && ChunkSize) {
- return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize, Bucket, Key].join('::'));
- } else {
- return null;
- }
- },
-
- getUploadIdList: function (uuid) {
- if (!uuid) return null;
- init.call(this);
- var list = [];
- for (var i = 0; i < cache.length; i++) {
- if (cache[i][0] === uuid) list.push(cache[i][1]);
- }
- return list.length ? list : null;
- },
-
- saveUploadId: function (uuid, UploadId, limit) {
- init.call(this);
- if (!uuid) return;
-
- for (var i = cache.length - 1; i >= 0; i--) {
- var item = cache[i];
- if (item[0] === uuid && item[1] === UploadId) {
- cache.splice(i, 1);
- }
- }
- cache.unshift([uuid, UploadId, Math.round(Date.now() / 1000)]);
- if (cache.length > limit) cache.splice(limit);
- save();
- },
-
- removeUploadId: function (UploadId) {
- init.call(this);
- delete mod.using[UploadId];
- for (var i = cache.length - 1; i >= 0; i--) {
- if (cache[i][1] === UploadId) cache.splice(i, 1);
- }
- save();
- }
- };
- module.exports = mod;
- }),
- (function(module, exports, __webpack_require__) {
- var COS = __webpack_require__(6);
- module.exports = COS;
- }),
- (function(module, exports, __webpack_require__) {
- "use strict";
- var util = __webpack_require__(0);
- var event = __webpack_require__(3);
- var task = __webpack_require__(15);
- var base = __webpack_require__(16);
- var advance = __webpack_require__(18);
- var defaultOptions = {
- AppId: '',
- SecretId: '',
- SecretKey: '',
- SecurityToken: '',
- ChunkRetryTimes: 2,
- FileParallelLimit: 3,
- ChunkParallelLimit: 3,
- ChunkSize: 1024 * 1024,
- SliceSize: 1024 * 1024,
- CopyChunkParallelLimit: 20,
- CopyChunkSize: 1024 * 1024 * 10,
- CopySliceSize: 1024 * 1024 * 10,
- MaxPartNumber: 10000,
- ProgressInterval: 1000,
- Domain: '',
- ServiceDomain: '',
- Protocol: '',
- CompatibilityMode: false,
- ForcePathStyle: false,
- UseRawKey: false,
- Timeout: 0,
- CorrectClockSkew: true,
- SystemClockOffset: 0,
- UploadCheckContentMd5: false,
- UploadQueueSize: 10000,
- UploadAddMetaMd5: false,
- UploadIdCacheLimit: 50,
- UseAccelerate: false
- };
- var COS = function (options) {
- this.options = util.extend(util.clone(defaultOptions), options || {});
- this.options.FileParallelLimit = Math.max(1, this.options.FileParallelLimit);
- this.options.ChunkParallelLimit = Math.max(1, this.options.ChunkParallelLimit);
- this.options.ChunkRetryTimes = Math.max(0, this.options.ChunkRetryTimes);
- this.options.ChunkSize = Math.max(1024 * 1024, this.options.ChunkSize);
- this.options.CopyChunkParallelLimit = Math.max(1, this.options.CopyChunkParallelLimit);
- this.options.CopyChunkSize = Math.max(1024 * 1024, this.options.CopyChunkSize);
- this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize);
- this.options.MaxPartNumber = Math.max(1024, Math.min(10000, this.options.MaxPartNumber));
- this.options.Timeout = Math.max(0, this.options.Timeout);
- if (this.options.AppId) {
- console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g: "test-1250000000").');
- }
- if (util.isNode()) {
- console.warn('warning: cos-js-sdk-v5 不支持 nodejs 环境使用,请改用 cos-nodejs-sdk-v5,参考文档: https://cloud.tencent.com/document/product/436/8629');
- console.warn('warning: cos-js-sdk-v5 does not support nodejs environment. Please use cos-nodejs-sdk-v5 instead. See: https://cloud.tencent.com/document/product/436/8629');
- }
- event.init(this);
- task.init(this);
- };
- base.init(COS, task);
- advance.init(COS, task);
- COS.util = {
- md5: util.md5,
- xml2json: util.xml2json,
- json2xml: util.json2xml
- };
- COS.getAuthorization = util.getAuth;
- COS.version = '1.3.1';
- module.exports = COS;
- }),
- (function(module, exports, __webpack_require__) {
- (function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;
- (function () {
- 'use strict';
- var ERROR = 'input is invalid type';
- var WINDOW = typeof window === 'object';
- var root = WINDOW ? window : {};
- if (root.JS_MD5_NO_WINDOW) {
- WINDOW = false;
- }
- var WEB_WORKER = !WINDOW && typeof self === 'object';
- var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
- if (NODE_JS) {
- root = global;
- } else if (WEB_WORKER) {
- root = self;
- }
- var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
- var AMD = "function" === 'function' && __webpack_require__(9);
- var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
- var HEX_CHARS = '0123456789abcdef'.split('');
- var EXTRA = [128, 32768, 8388608, -2147483648];
- var SHIFT = [0, 8, 16, 24];
- var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
- var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
- var blocks = [],
- buffer8;
- if (ARRAY_BUFFER) {
- var buffer = new ArrayBuffer(68);
- buffer8 = new Uint8Array(buffer);
- blocks = new Uint32Array(buffer);
- }
- if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
- Array.isArray = function (obj) {
- return Object.prototype.toString.call(obj) === '[object Array]';
- };
- }
- if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
- ArrayBuffer.isView = function (obj) {
- return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
- };
- }
-
-
-
-
-
-
- var createOutputMethod = function (outputType) {
- return function (message, isBinStr) {
- return new Md5(true).update(message, isBinStr)[outputType]();
- };
- };
-
-
- var createMethod = function () {
- var method = createOutputMethod('hex');
- if (NODE_JS) {
- method = nodeWrap(method);
- }
- method.getCtx = method.create = function () {
- return new Md5();
- };
- method.update = function (message) {
- return method.create().update(message);
- };
- for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
- var type = OUTPUT_TYPES[i];
- method[type] = createOutputMethod(type);
- }
- return method;
- };
- var nodeWrap = function (method) {
- var crypto = eval("require('crypto')");
- var Buffer = eval("require('buffer').Buffer");
- var nodeMethod = function (message) {
- if (typeof message === 'string') {
- return crypto.createHash('md5').update(message, 'utf8').digest('hex');
- } else {
- if (message === null || message === undefined) {
- throw ERROR;
- } else if (message.constructor === ArrayBuffer) {
- message = new Uint8Array(message);
- }
- }
- if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) {
- return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
- } else {
- return method(message);
- }
- };
- return nodeMethod;
- };
-
- function Md5(sharedMemory) {
- if (sharedMemory) {
- blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
- this.blocks = blocks;
- this.buffer8 = buffer8;
- } else {
- if (ARRAY_BUFFER) {
- var buffer = new ArrayBuffer(68);
- this.buffer8 = new Uint8Array(buffer);
- this.blocks = new Uint32Array(buffer);
- } else {
- this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
- }
- }
- this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
- this.finalized = this.hashed = false;
- this.first = true;
- }
-
- Md5.prototype.update = function (message, isBinStr) {
- if (this.finalized) {
- return;
- }
- var code,
- index = 0,
- i,
- length = message.length,
- blocks = this.blocks;
- var buffer8 = this.buffer8;
- while (index < length) {
- if (this.hashed) {
- this.hashed = false;
- blocks[0] = blocks[16];
- blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
- }
- if (ARRAY_BUFFER) {
- for (i = this.start; index < length && i < 64; ++index) {
- code = message.charCodeAt(index);
- if (isBinStr || code < 0x80) {
- buffer8[i++] = code;
- } else if (code < 0x800) {
- buffer8[i++] = 0xc0 | code >> 6;
- buffer8[i++] = 0x80 | code & 0x3f;
- } else if (code < 0xd800 || code >= 0xe000) {
- buffer8[i++] = 0xe0 | code >> 12;
- buffer8[i++] = 0x80 | code >> 6 & 0x3f;
- buffer8[i++] = 0x80 | code & 0x3f;
- } else {
- code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
- buffer8[i++] = 0xf0 | code >> 18;
- buffer8[i++] = 0x80 | code >> 12 & 0x3f;
- buffer8[i++] = 0x80 | code >> 6 & 0x3f;
- buffer8[i++] = 0x80 | code & 0x3f;
- }
- }
- } else {
- for (i = this.start; index < length && i < 64; ++index) {
- code = message.charCodeAt(index);
- if (isBinStr || code < 0x80) {
- blocks[i >> 2] |= code << SHIFT[i++ & 3];
- } else if (code < 0x800) {
- blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
- } else if (code < 0xd800 || code >= 0xe000) {
- blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
- } else {
- code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
- blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
- blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
- }
- }
- }
- this.lastByteIndex = i;
- this.bytes += i - this.start;
- if (i >= 64) {
- this.start = i - 64;
- this.hash();
- this.hashed = true;
- } else {
- this.start = i;
- }
- }
- if (this.bytes > 4294967295) {
- this.hBytes += this.bytes / 4294967296 << 0;
- this.bytes = this.bytes % 4294967296;
- }
- return this;
- };
- Md5.prototype.finalize = function () {
- if (this.finalized) {
- return;
- }
- this.finalized = true;
- var blocks = this.blocks,
- i = this.lastByteIndex;
- blocks[i >> 2] |= EXTRA[i & 3];
- if (i >= 56) {
- if (!this.hashed) {
- this.hash();
- }
- blocks[0] = blocks[16];
- blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
- }
- blocks[14] = this.bytes << 3;
- blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
- this.hash();
- };
- Md5.prototype.hash = function () {
- var a,
- b,
- c,
- d,
- bc,
- da,
- blocks = this.blocks;
- if (this.first) {
- a = blocks[0] - 680876937;
- a = (a << 7 | a >>> 25) - 271733879 << 0;
- d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
- d = (d << 12 | d >>> 20) + a << 0;
- c = (-271733879 ^ d & (a ^ -271733879)) + blocks[2] - 1126478375;
- c = (c << 17 | c >>> 15) + d << 0;
- b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209;
- b = (b << 22 | b >>> 10) + c << 0;
- } else {
- a = this.h0;
- b = this.h1;
- c = this.h2;
- d = this.h3;
- a += (d ^ b & (c ^ d)) + blocks[0] - 680876936;
- a = (a << 7 | a >>> 25) + b << 0;
- d += (c ^ a & (b ^ c)) + blocks[1] - 389564586;
- d = (d << 12 | d >>> 20) + a << 0;
- c += (b ^ d & (a ^ b)) + blocks[2] + 606105819;
- c = (c << 17 | c >>> 15) + d << 0;
- b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330;
- b = (b << 22 | b >>> 10) + c << 0;
- }
- a += (d ^ b & (c ^ d)) + blocks[4] - 176418897;
- a = (a << 7 | a >>> 25) + b << 0;
- d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426;
- d = (d << 12 | d >>> 20) + a << 0;
- c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341;
- c = (c << 17 | c >>> 15) + d << 0;
- b += (a ^ c & (d ^ a)) + blocks[7] - 45705983;
- b = (b << 22 | b >>> 10) + c << 0;
- a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416;
- a = (a << 7 | a >>> 25) + b << 0;
- d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417;
- d = (d << 12 | d >>> 20) + a << 0;
- c += (b ^ d & (a ^ b)) + blocks[10] - 42063;
- c = (c << 17 | c >>> 15) + d << 0;
- b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162;
- b = (b << 22 | b >>> 10) + c << 0;
- a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682;
- a = (a << 7 | a >>> 25) + b << 0;
- d += (c ^ a & (b ^ c)) + blocks[13] - 40341101;
- d = (d << 12 | d >>> 20) + a << 0;
- c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290;
- c = (c << 17 | c >>> 15) + d << 0;
- b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329;
- b = (b << 22 | b >>> 10) + c << 0;
- a += (c ^ d & (b ^ c)) + blocks[1] - 165796510;
- a = (a << 5 | a >>> 27) + b << 0;
- d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632;
- d = (d << 9 | d >>> 23) + a << 0;
- c += (a ^ b & (d ^ a)) + blocks[11] + 643717713;
- c = (c << 14 | c >>> 18) + d << 0;
- b += (d ^ a & (c ^ d)) + blocks[0] - 373897302;
- b = (b << 20 | b >>> 12) + c << 0;
- a += (c ^ d & (b ^ c)) + blocks[5] - 701558691;
- a = (a << 5 | a >>> 27) + b << 0;
- d += (b ^ c & (a ^ b)) + blocks[10] + 38016083;
- d = (d << 9 | d >>> 23) + a << 0;
- c += (a ^ b & (d ^ a)) + blocks[15] - 660478335;
- c = (c << 14 | c >>> 18) + d << 0;
- b += (d ^ a & (c ^ d)) + blocks[4] - 405537848;
- b = (b << 20 | b >>> 12) + c << 0;
- a += (c ^ d & (b ^ c)) + blocks[9] + 568446438;
- a = (a << 5 | a >>> 27) + b << 0;
- d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690;
- d = (d << 9 | d >>> 23) + a << 0;
- c += (a ^ b & (d ^ a)) + blocks[3] - 187363961;
- c = (c << 14 | c >>> 18) + d << 0;
- b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501;
- b = (b << 20 | b >>> 12) + c << 0;
- a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467;
- a = (a << 5 | a >>> 27) + b << 0;
- d += (b ^ c & (a ^ b)) + blocks[2] - 51403784;
- d = (d << 9 | d >>> 23) + a << 0;
- c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473;
- c = (c << 14 | c >>> 18) + d << 0;
- b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734;
- b = (b << 20 | b >>> 12) + c << 0;
- bc = b ^ c;
- a += (bc ^ d) + blocks[5] - 378558;
- a = (a << 4 | a >>> 28) + b << 0;
- d += (bc ^ a) + blocks[8] - 2022574463;
- d = (d << 11 | d >>> 21) + a << 0;
- da = d ^ a;
- c += (da ^ b) + blocks[11] + 1839030562;
- c = (c << 16 | c >>> 16) + d << 0;
- b += (da ^ c) + blocks[14] - 35309556;
- b = (b << 23 | b >>> 9) + c << 0;
- bc = b ^ c;
- a += (bc ^ d) + blocks[1] - 1530992060;
- a = (a << 4 | a >>> 28) + b << 0;
- d += (bc ^ a) + blocks[4] + 1272893353;
- d = (d << 11 | d >>> 21) + a << 0;
- da = d ^ a;
- c += (da ^ b) + blocks[7] - 155497632;
- c = (c << 16 | c >>> 16) + d << 0;
- b += (da ^ c) + blocks[10] - 1094730640;
- b = (b << 23 | b >>> 9) + c << 0;
- bc = b ^ c;
- a += (bc ^ d) + blocks[13] + 681279174;
- a = (a << 4 | a >>> 28) + b << 0;
- d += (bc ^ a) + blocks[0] - 358537222;
- d = (d << 11 | d >>> 21) + a << 0;
- da = d ^ a;
- c += (da ^ b) + blocks[3] - 722521979;
- c = (c << 16 | c >>> 16) + d << 0;
- b += (da ^ c) + blocks[6] + 76029189;
- b = (b << 23 | b >>> 9) + c << 0;
- bc = b ^ c;
- a += (bc ^ d) + blocks[9] - 640364487;
- a = (a << 4 | a >>> 28) + b << 0;
- d += (bc ^ a) + blocks[12] - 421815835;
- d = (d << 11 | d >>> 21) + a << 0;
- da = d ^ a;
- c += (da ^ b) + blocks[15] + 530742520;
- c = (c << 16 | c >>> 16) + d << 0;
- b += (da ^ c) + blocks[2] - 995338651;
- b = (b << 23 | b >>> 9) + c << 0;
- a += (c ^ (b | ~d)) + blocks[0] - 198630844;
- a = (a << 6 | a >>> 26) + b << 0;
- d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
- d = (d << 10 | d >>> 22) + a << 0;
- c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
- c = (c << 15 | c >>> 17) + d << 0;
- b += (d ^ (c | ~a)) + blocks[5] - 57434055;
- b = (b << 21 | b >>> 11) + c << 0;
- a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
- a = (a << 6 | a >>> 26) + b << 0;
- d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
- d = (d << 10 | d >>> 22) + a << 0;
- c += (a ^ (d | ~b)) + blocks[10] - 1051523;
- c = (c << 15 | c >>> 17) + d << 0;
- b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
- b = (b << 21 | b >>> 11) + c << 0;
- a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
- a = (a << 6 | a >>> 26) + b << 0;
- d += (b ^ (a | ~c)) + blocks[15] - 30611744;
- d = (d << 10 | d >>> 22) + a << 0;
- c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
- c = (c << 15 | c >>> 17) + d << 0;
- b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
- b = (b << 21 | b >>> 11) + c << 0;
- a += (c ^ (b | ~d)) + blocks[4] - 145523070;
- a = (a << 6 | a >>> 26) + b << 0;
- d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
- d = (d << 10 | d >>> 22) + a << 0;
- c += (a ^ (d | ~b)) + blocks[2] + 718787259;
- c = (c << 15 | c >>> 17) + d << 0;
- b += (d ^ (c | ~a)) + blocks[9] - 343485551;
- b = (b << 21 | b >>> 11) + c << 0;
- if (this.first) {
- this.h0 = a + 1732584193 << 0;
- this.h1 = b - 271733879 << 0;
- this.h2 = c - 1732584194 << 0;
- this.h3 = d + 271733878 << 0;
- this.first = false;
- } else {
- this.h0 = this.h0 + a << 0;
- this.h1 = this.h1 + b << 0;
- this.h2 = this.h2 + c << 0;
- this.h3 = this.h3 + d << 0;
- }
- };
-
- Md5.prototype.hex = function () {
- this.finalize();
- var h0 = this.h0,
- h1 = this.h1,
- h2 = this.h2,
- h3 = this.h3;
- return HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] + HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] + HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] + HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] + HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] + HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] + HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] + HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] + HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] + HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] + HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] + HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] + HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] + HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] + HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] + HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F];
- };
-
- Md5.prototype.toString = Md5.prototype.hex;
-
- Md5.prototype.digest = function (format) {
- if (format === 'hex') return this.hex();
- this.finalize();
- var h0 = this.h0,
- h1 = this.h1,
- h2 = this.h2,
- h3 = this.h3;
- var res = [h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >> 24 & 0xFF];
- return res;
- };
-
- Md5.prototype.array = Md5.prototype.digest;
-
- Md5.prototype.arrayBuffer = function () {
- this.finalize();
- var buffer = new ArrayBuffer(16);
- var blocks = new Uint32Array(buffer);
- blocks[0] = this.h0;
- blocks[1] = this.h1;
- blocks[2] = this.h2;
- blocks[3] = this.h3;
- return buffer;
- };
-
- Md5.prototype.buffer = Md5.prototype.arrayBuffer;
-
- Md5.prototype.base64 = function () {
- var v1,
- v2,
- v3,
- base64Str = '',
- bytes = this.array();
- for (var i = 0; i < 15;) {
- v1 = bytes[i++];
- v2 = bytes[i++];
- v3 = bytes[i++];
- base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + BASE64_ENCODE_CHAR[v3 & 63];
- }
- v1 = bytes[i];
- base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + '==';
- return base64Str;
- };
- var exports = createMethod();
- if (COMMON_JS) {
- module.exports = exports;
- } else {
-
- root.md5 = exports;
- if (AMD) {
- !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
- return exports;
- }).call(exports, __webpack_require__, exports, module),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- }
- }
- })();
- }.call(exports, __webpack_require__(1), __webpack_require__(8)))
- }),
- (function(module, exports) {
- var g;
- g = (function() {
- return this;
- })();
- try {
-
- g = g || Function("return this")() || (1,eval)("this");
- } catch(e) {
-
- if(typeof window === "object")
- g = window;
- }
- module.exports = g;
- }),
- (function(module, exports) {
- (function(__webpack_amd_options__) {
- module.exports = __webpack_amd_options__;
- }.call(exports, {}))
- }),
- (function(module, exports, __webpack_require__) {
- var CryptoJS = CryptoJS || function (g, l) {
- var e = {},
- d = e.lib = {},
- m = function () {},
- k = d.Base = { extend: function (a) {
- m.prototype = this;var c = new m();a && c.mixIn(a);c.hasOwnProperty("init") || (c.init = function () {
- c.$super.init.apply(this, arguments);
- });c.init.prototype = c;c.$super = this;return c;
- }, create: function () {
- var a = this.extend();a.init.apply(a, arguments);return a;
- }, init: function () {}, mixIn: function (a) {
- for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);a.hasOwnProperty("toString") && (this.toString = a.toString);
- }, clone: function () {
- return this.init.prototype.extend(this);
- } },
- p = d.WordArray = k.extend({ init: function (a, c) {
- a = this.words = a || [];this.sigBytes = c != l ? c : 4 * a.length;
- }, toString: function (a) {
- return (a || n).stringify(this);
- }, concat: function (a) {
- var c = this.words,
- q = a.words,
- f = this.sigBytes;a = a.sigBytes;this.clamp();if (f % 4) for (var b = 0; b < a; b++) c[f + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((f + b) % 4);else if (65535 < q.length) for (b = 0; b < a; b += 4) c[f + b >>> 2] = q[b >>> 2];else c.push.apply(c, q);this.sigBytes += a;return this;
- }, clamp: function () {
- var a = this.words,
- c = this.sigBytes;a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);a.length = g.ceil(c / 4);
- }, clone: function () {
- var a = k.clone.call(this);a.words = this.words.slice(0);return a;
- }, random: function (a) {
- for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * g.random() | 0);return new p.init(c, a);
- } }),
- b = e.enc = {},
- n = b.Hex = { stringify: function (a) {
- var c = a.words;a = a.sigBytes;for (var b = [], f = 0; f < a; f++) {
- var d = c[f >>> 2] >>> 24 - 8 * (f % 4) & 255;b.push((d >>> 4).toString(16));b.push((d & 15).toString(16));
- }return b.join("");
- }, parse: function (a) {
- for (var c = a.length, b = [], f = 0; f < c; f += 2) b[f >>> 3] |= parseInt(a.substr(f, 2), 16) << 24 - 4 * (f % 8);return new p.init(b, c / 2);
- } },
- j = b.Latin1 = { stringify: function (a) {
- var c = a.words;a = a.sigBytes;for (var b = [], f = 0; f < a; f++) b.push(String.fromCharCode(c[f >>> 2] >>> 24 - 8 * (f % 4) & 255));return b.join("");
- }, parse: function (a) {
- for (var c = a.length, b = [], f = 0; f < c; f++) b[f >>> 2] |= (a.charCodeAt(f) & 255) << 24 - 8 * (f % 4);return new p.init(b, c);
- } },
- h = b.Utf8 = { stringify: function (a) {
- try {
- return decodeURIComponent(escape(j.stringify(a)));
- } catch (c) {
- throw Error("Malformed UTF-8 data");
- }
- }, parse: function (a) {
- return j.parse(unescape(encodeURIComponent(a)));
- } },
- r = d.BufferedBlockAlgorithm = k.extend({ reset: function () {
- this._data = new p.init();this._nDataBytes = 0;
- }, _append: function (a) {
- "string" == typeof a && (a = h.parse(a));this._data.concat(a);this._nDataBytes += a.sigBytes;
- }, _process: function (a) {
- var c = this._data,
- b = c.words,
- f = c.sigBytes,
- d = this.blockSize,
- e = f / (4 * d),
- e = a ? g.ceil(e) : g.max((e | 0) - this._minBufferSize, 0);a = e * d;f = g.min(4 * a, f);if (a) {
- for (var k = 0; k < a; k += d) this._doProcessBlock(b, k);k = b.splice(0, a);c.sigBytes -= f;
- }return new p.init(k, f);
- }, clone: function () {
- var a = k.clone.call(this);
- a._data = this._data.clone();return a;
- }, _minBufferSize: 0 });d.Hasher = r.extend({ cfg: k.extend(), init: function (a) {
- this.cfg = this.cfg.extend(a);this.reset();
- }, reset: function () {
- r.reset.call(this);this._doReset();
- }, update: function (a) {
- this._append(a);this._process();return this;
- }, finalize: function (a) {
- a && this._append(a);return this._doFinalize();
- }, blockSize: 16, _createHelper: function (a) {
- return function (b, d) {
- return new a.init(d).finalize(b);
- };
- }, _createHmacHelper: function (a) {
- return function (b, d) {
- return new s.HMAC.init(a, d).finalize(b);
- };
- } });var s = e.algo = {};return e;
- }(Math);
- (function () {
- var g = CryptoJS,
- l = g.lib,
- e = l.WordArray,
- d = l.Hasher,
- m = [],
- l = g.algo.SHA1 = d.extend({ _doReset: function () {
- this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]);
- }, _doProcessBlock: function (d, e) {
- for (var b = this._hash.words, n = b[0], j = b[1], h = b[2], g = b[3], l = b[4], a = 0; 80 > a; a++) {
- if (16 > a) m[a] = d[e + a] | 0;else {
- var c = m[a - 3] ^ m[a - 8] ^ m[a - 14] ^ m[a - 16];m[a] = c << 1 | c >>> 31;
- }c = (n << 5 | n >>> 27) + l + m[a];c = 20 > a ? c + ((j & h | ~j & g) + 1518500249) : 40 > a ? c + ((j ^ h ^ g) + 1859775393) : 60 > a ? c + ((j & h | j & g | h & g) - 1894007588) : c + ((j ^ h ^ g) - 899497514);l = g;g = h;h = j << 30 | j >>> 2;j = n;n = c;
- }b[0] = b[0] + n | 0;b[1] = b[1] + j | 0;b[2] = b[2] + h | 0;b[3] = b[3] + g | 0;b[4] = b[4] + l | 0;
- }, _doFinalize: function () {
- var d = this._data,
- e = d.words,
- b = 8 * this._nDataBytes,
- g = 8 * d.sigBytes;e[g >>> 5] |= 128 << 24 - g % 32;e[(g + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296);e[(g + 64 >>> 9 << 4) + 15] = b;d.sigBytes = 4 * e.length;this._process();return this._hash;
- }, clone: function () {
- var e = d.clone.call(this);e._hash = this._hash.clone();return e;
- } });g.SHA1 = d._createHelper(l);g.HmacSHA1 = d._createHmacHelper(l);
- })();
- (function () {
- var g = CryptoJS,
- l = g.enc.Utf8;g.algo.HMAC = g.lib.Base.extend({ init: function (e, d) {
- e = this._hasher = new e.init();"string" == typeof d && (d = l.parse(d));var g = e.blockSize,
- k = 4 * g;d.sigBytes > k && (d = e.finalize(d));d.clamp();for (var p = this._oKey = d.clone(), b = this._iKey = d.clone(), n = p.words, j = b.words, h = 0; h < g; h++) n[h] ^= 1549556828, j[h] ^= 909522486;p.sigBytes = b.sigBytes = k;this.reset();
- }, reset: function () {
- var e = this._hasher;e.reset();e.update(this._iKey);
- }, update: function (e) {
- this._hasher.update(e);return this;
- }, finalize: function (e) {
- var d = this._hasher;e = d.finalize(e);d.reset();return d.finalize(this._oKey.clone().concat(e));
- } });
- })();
- (function () {
-
- var C = CryptoJS;
- var C_lib = C.lib;
- var WordArray = C_lib.WordArray;
- var C_enc = C.enc;
-
- var Base64 = C_enc.Base64 = {
-
- stringify: function (wordArray) {
-
- var words = wordArray.words;
- var sigBytes = wordArray.sigBytes;
- var map = this._map;
-
- wordArray.clamp();
-
- var base64Chars = [];
- for (var i = 0; i < sigBytes; i += 3) {
- var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;
- var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;
- var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;
- var triplet = byte1 << 16 | byte2 << 8 | byte3;
- for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {
- base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));
- }
- }
-
- var paddingChar = map.charAt(64);
- if (paddingChar) {
- while (base64Chars.length % 4) {
- base64Chars.push(paddingChar);
- }
- }
- return base64Chars.join('');
- },
-
- parse: function (base64Str) {
-
- var base64StrLength = base64Str.length;
- var map = this._map;
-
- var paddingChar = map.charAt(64);
- if (paddingChar) {
- var paddingIndex = base64Str.indexOf(paddingChar);
- if (paddingIndex != -1) {
- base64StrLength = paddingIndex;
- }
- }
-
- var words = [];
- var nBytes = 0;
- for (var i = 0; i < base64StrLength; i++) {
- if (i % 4) {
- var bits1 = map.indexOf(base64Str.charAt(i - 1)) << i % 4 * 2;
- var bits2 = map.indexOf(base64Str.charAt(i)) >>> 6 - i % 4 * 2;
- words[nBytes >>> 2] |= (bits1 | bits2) << 24 - nBytes % 4 * 8;
- nBytes++;
- }
- }
- return WordArray.create(words, nBytes);
- },
- _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
- };
- })();
- if (true) {
- module.exports = CryptoJS;
- } else {
- window.CryptoJS = CryptoJS;
- }
- }),
- (function(module, exports, __webpack_require__) {
- var DOMParser = __webpack_require__(12).DOMParser;
- var xmlToJSON = function () {
- this.version = "1.3.5";
- var options = {
- mergeCDATA: true,
- normalize: true,
- stripElemPrefix: true
- };
- var prefixMatch = new RegExp(/(?!xmlns)^.*:/);
- var trimMatch = new RegExp(/^\s+|\s+$/g);
- this.grokType = function (sValue) {
- if (/^\s*$/.test(sValue)) {
- return null;
- }
- if (/^(?:true|false)$/i.test(sValue)) {
- return sValue.toLowerCase() === "true";
- }
- if (isFinite(sValue)) {
- return parseFloat(sValue);
- }
- return sValue;
- };
- this.parseString = function (xmlString, opt) {
- if (xmlString) {
- var xml = this.stringToXML(xmlString);
- if (xml.getElementsByTagName('parsererror').length) {
- return null;
- } else {
- return this.parseXML(xml, opt);
- }
- } else {
- return null;
- }
- };
- this.parseXML = function (oXMLParent, opt) {
-
- for (var key in opt) {
- options[key] = opt[key];
- }
- var vResult = {},
- nLength = 0,
- sCollectedTxt = "";
-
- var childNum = oXMLParent.childNodes.length;
- if (childNum) {
- for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) {
- oNode = oXMLParent.childNodes.item(nItem);
- if (oNode.nodeType === 4) {
- if (options.mergeCDATA) {
- sCollectedTxt += oNode.nodeValue;
- }
- }
- else if (oNode.nodeType === 3) {
- sCollectedTxt += oNode.nodeValue;
- }
- else if (oNode.nodeType === 1) {
-
- if (nLength === 0) {
- vResult = {};
- }
-
- if (options.stripElemPrefix) {
- sProp = oNode.nodeName.replace(prefixMatch, '');
- } else {
- sProp = oNode.nodeName;
- }
- vContent = xmlToJSON.parseXML(oNode);
- if (vResult.hasOwnProperty(sProp)) {
- if (vResult[sProp].constructor !== Array) {
- vResult[sProp] = [vResult[sProp]];
- }
- vResult[sProp].push(vContent);
- } else {
- vResult[sProp] = vContent;
- nLength++;
- }
- }
- }
- }
- if (!Object.keys(vResult).length) {
-
- vResult = sCollectedTxt || '';
- }
- return vResult;
- };
-
-
- this.xmlToString = function (xmlDoc) {
- try {
- var xmlString = xmlDoc.xml ? xmlDoc.xml : new XMLSerializer().serializeToString(xmlDoc);
- return xmlString;
- } catch (err) {
- return null;
- }
- };
-
-
- this.stringToXML = function (xmlString) {
- try {
- var xmlDoc = null;
- if (window.DOMParser) {
- var parser = new DOMParser();
- xmlDoc = parser.parseFromString(xmlString, "text/xml");
- return xmlDoc;
- } else {
- xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
- xmlDoc.async = false;
- xmlDoc.loadXML(xmlString);
- return xmlDoc;
- }
- } catch (e) {
- return null;
- }
- };
- return this;
- }.call({});
- var xml2json = function (xmlString) {
- return xmlToJSON.parseString(xmlString);
- };
- module.exports = xml2json;
- }),
- (function(module, exports, __webpack_require__) {
- function DOMParser(options){
- this.options = options ||{locator:{}};
-
- }
- DOMParser.prototype.parseFromString = function(source,mimeType){
- var options = this.options;
- var sax = new XMLReader();
- var domBuilder = options.domBuilder || new DOMHandler();
- var errorHandler = options.errorHandler;
- var locator = options.locator;
- var defaultNSMap = options.xmlns||{};
- var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"}
- if(locator){
- domBuilder.setDocumentLocator(locator)
- }
-
- sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
- sax.domBuilder = options.domBuilder || domBuilder;
- if(/\/x?html?$/.test(mimeType)){
- entityMap.nbsp = '\xa0';
- entityMap.copy = '\xa9';
- defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
- }
- defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
- if(source){
- sax.parse(source,defaultNSMap,entityMap);
- }else{
- sax.errorHandler.error("invalid doc source");
- }
- return domBuilder.doc;
- }
- function buildErrorHandler(errorImpl,domBuilder,locator){
- if(!errorImpl){
- if(domBuilder instanceof DOMHandler){
- return domBuilder;
- }
- errorImpl = domBuilder ;
- }
- var errorHandler = {}
- var isCallback = errorImpl instanceof Function;
- locator = locator||{}
- function build(key){
- var fn = errorImpl[key];
- if(!fn && isCallback){
- fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
- }
- errorHandler[key] = fn && function(msg){
- fn('[xmldom '+key+']\t'+msg+_locator(locator));
- }||function(){};
- }
- build('warning');
- build('error');
- build('fatalError');
- return errorHandler;
- }
- function DOMHandler() {
- this.cdata = false;
- }
- function position(locator,node){
- node.lineNumber = locator.lineNumber;
- node.columnNumber = locator.columnNumber;
- }
-
- DOMHandler.prototype = {
- startDocument : function() {
- this.doc = new DOMImplementation().createDocument(null, null, null);
- if (this.locator) {
- this.doc.documentURI = this.locator.systemId;
- }
- },
- startElement:function(namespaceURI, localName, qName, attrs) {
- var doc = this.doc;
- var el = doc.createElementNS(namespaceURI, qName||localName);
- var len = attrs.length;
- appendElement(this, el);
- this.currentElement = el;
-
- this.locator && position(this.locator,el)
- for (var i = 0 ; i < len; i++) {
- var namespaceURI = attrs.getURI(i);
- var value = attrs.getValue(i);
- var qName = attrs.getQName(i);
- var attr = doc.createAttributeNS(namespaceURI, qName);
- this.locator &&position(attrs.getLocator(i),attr);
- attr.value = attr.nodeValue = value;
- el.setAttributeNode(attr)
- }
- },
- endElement:function(namespaceURI, localName, qName) {
- var current = this.currentElement
- var tagName = current.tagName;
- this.currentElement = current.parentNode;
- },
- startPrefixMapping:function(prefix, uri) {
- },
- endPrefixMapping:function(prefix) {
- },
- processingInstruction:function(target, data) {
- var ins = this.doc.createProcessingInstruction(target, data);
- this.locator && position(this.locator,ins)
- appendElement(this, ins);
- },
- ignorableWhitespace:function(ch, start, length) {
- },
- characters:function(chars, start, length) {
- chars = _toString.apply(this,arguments)
-
- if(chars){
- if (this.cdata) {
- var charNode = this.doc.createCDATASection(chars);
- } else {
- var charNode = this.doc.createTextNode(chars);
- }
- if(this.currentElement){
- this.currentElement.appendChild(charNode);
- }else if(/^\s*$/.test(chars)){
- this.doc.appendChild(charNode);
-
- }
- this.locator && position(this.locator,charNode)
- }
- },
- skippedEntity:function(name) {
- },
- endDocument:function() {
- this.doc.normalize();
- },
- setDocumentLocator:function (locator) {
- if(this.locator = locator){
- locator.lineNumber = 0;
- }
- },
-
- comment:function(chars, start, length) {
- chars = _toString.apply(this,arguments)
- var comm = this.doc.createComment(chars);
- this.locator && position(this.locator,comm)
- appendElement(this, comm);
- },
-
- startCDATA:function() {
-
- this.cdata = true;
- },
- endCDATA:function() {
- this.cdata = false;
- },
-
- startDTD:function(name, publicId, systemId) {
- var impl = this.doc.implementation;
- if (impl && impl.createDocumentType) {
- var dt = impl.createDocumentType(name, publicId, systemId);
- this.locator && position(this.locator,dt)
- appendElement(this, dt);
- }
- },
-
- warning:function(error) {
- console.warn('[xmldom warning]\t'+error,_locator(this.locator));
- },
- error:function(error) {
- console.error('[xmldom error]\t'+error,_locator(this.locator));
- },
- fatalError:function(error) {
- console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
- throw error;
- }
- }
- function _locator(l){
- if(l){
- return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
- }
- }
- function _toString(chars,start,length){
- if(typeof chars == 'string'){
- return chars.substr(start,length)
- }else{
- if(chars.length >= start+length || start){
- return new java.lang.String(chars,start,length)+'';
- }
- return chars;
- }
- }
- "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
- DOMHandler.prototype[key] = function(){return null}
- })
- function appendElement (hander,node) {
- if (!hander.currentElement) {
- hander.doc.appendChild(node);
- } else {
- hander.currentElement.appendChild(node);
- }
- }
- var XMLReader = __webpack_require__(13).XMLReader;
- var DOMImplementation = exports.DOMImplementation = __webpack_require__(2).DOMImplementation;
- exports.XMLSerializer = __webpack_require__(2).XMLSerializer ;
- exports.DOMParser = DOMParser;
- }),
- (function(module, exports) {
- var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
- var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
- var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
- var S_TAG = 0;
- var S_ATTR = 1;
- var S_ATTR_SPACE=2;
- var S_EQ = 3;
- var S_ATTR_NOQUOT_VALUE = 4;
- var S_ATTR_END = 5;
- var S_TAG_SPACE = 6;
- var S_TAG_CLOSE = 7;
- function XMLReader(){
-
- }
- XMLReader.prototype = {
- parse:function(source,defaultNSMap,entityMap){
- var domBuilder = this.domBuilder;
- domBuilder.startDocument();
- _copy(defaultNSMap ,defaultNSMap = {})
- parse(source,defaultNSMap,entityMap,
- domBuilder,this.errorHandler);
- domBuilder.endDocument();
- }
- }
- function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
- function fixedFromCharCode(code) {
-
-
- if (code > 0xffff) {
- code -= 0x10000;
- var surrogate1 = 0xd800 + (code >> 10)
- , surrogate2 = 0xdc00 + (code & 0x3ff);
- return String.fromCharCode(surrogate1, surrogate2);
- } else {
- return String.fromCharCode(code);
- }
- }
- function entityReplacer(a){
- var k = a.slice(1,-1);
- if(k in entityMap){
- return entityMap[k];
- }else if(k.charAt(0) === '#'){
- return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
- }else{
- errorHandler.error('entity not found:'+a);
- return a;
- }
- }
- function appendText(end){
- if(end>start){
- var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
- locator&&position(start);
- domBuilder.characters(xt,0,end-start);
- start = end
- }
- }
- function position(p,m){
- while(p>=lineEnd && (m = linePattern.exec(source))){
- lineStart = m.index;
- lineEnd = lineStart + m[0].length;
- locator.lineNumber++;
-
- }
- locator.columnNumber = p-lineStart+1;
- }
- var lineStart = 0;
- var lineEnd = 0;
- var linePattern = /.*(?:\r\n?|\n)|.*$/g
- var locator = domBuilder.locator;
-
- var parseStack = [{currentNSMap:defaultNSMapCopy}]
- var closeMap = {};
- var start = 0;
- while(true){
- try{
- var tagStart = source.indexOf('<',start);
- if(tagStart<0){
- if(!source.substr(start).match(/^\s*$/)){
- var doc = domBuilder.doc;
- var text = doc.createTextNode(source.substr(start));
- doc.appendChild(text);
- domBuilder.currentElement = text;
- }
- return;
- }
- if(tagStart>start){
- appendText(tagStart);
- }
- switch(source.charAt(tagStart+1)){
- case '/':
- var end = source.indexOf('>',tagStart+3);
- var tagName = source.substring(tagStart+2,end);
- var config = parseStack.pop();
- if(end<0){
-
- tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
-
- errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
- end = tagStart+1+tagName.length;
- }else if(tagName.match(/\s</)){
- tagName = tagName.replace(/[\s<].*/,'');
- errorHandler.error("end tag name: "+tagName+' maybe not complete');
- end = tagStart+1+tagName.length;
- }
-
-
- var localNSMap = config.localNSMap;
- var endMatch = config.tagName == tagName;
- var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()
- if(endIgnoreCaseMach){
- domBuilder.endElement(config.uri,config.localName,tagName);
- if(localNSMap){
- for(var prefix in localNSMap){
- domBuilder.endPrefixMapping(prefix) ;
- }
- }
- if(!endMatch){
- errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
- }
- }else{
- parseStack.push(config)
- }
-
- end++;
- break;
-
- case '?':
- locator&&position(tagStart);
- end = parseInstruction(source,tagStart,domBuilder);
- break;
- case '!':
- locator&&position(tagStart);
- end = parseDCC(source,tagStart,domBuilder,errorHandler);
- break;
- default:
- locator&&position(tagStart);
- var el = new ElementAttributes();
- var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
-
- var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
- var len = el.length;
-
-
- if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
- el.closed = true;
- if(!entityMap.nbsp){
- errorHandler.warning('unclosed xml attribute');
- }
- }
- if(locator && len){
- var locator2 = copyLocator(locator,{});
-
- for(var i = 0;i<len;i++){
- var a = el[i];
- position(a.offset);
- a.locator = copyLocator(locator,{});
- }
-
- domBuilder.locator = locator2
- if(appendElement(el,domBuilder,currentNSMap)){
- parseStack.push(el)
- }
- domBuilder.locator = locator;
- }else{
- if(appendElement(el,domBuilder,currentNSMap)){
- parseStack.push(el)
- }
- }
-
-
-
- if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
- end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
- }else{
- end++;
- }
- }
- }catch(e){
- errorHandler.error('element parse error: '+e)
-
- end = -1;
-
- }
- if(end>start){
- start = end;
- }else{
-
- appendText(Math.max(tagStart,start)+1);
- }
- }
- }
- function copyLocator(f,t){
- t.lineNumber = f.lineNumber;
- t.columnNumber = f.columnNumber;
- return t;
- }
- function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
- var attrName;
- var value;
- var p = ++start;
- var s = S_TAG;
- while(true){
- var c = source.charAt(p);
- switch(c){
- case '=':
- if(s === S_ATTR){
- attrName = source.slice(start,p);
- s = S_EQ;
- }else if(s === S_ATTR_SPACE){
- s = S_EQ;
- }else{
-
- throw new Error('attribute equal must after attrName');
- }
- break;
- case '\'':
- case '"':
- if(s === S_EQ || s === S_ATTR
- ){
- if(s === S_ATTR){
- errorHandler.warning('attribute value must after "="')
- attrName = source.slice(start,p)
- }
- start = p+1;
- p = source.indexOf(c,start)
- if(p>0){
- value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
- el.add(attrName,value,start-1);
- s = S_ATTR_END;
- }else{
-
- throw new Error('attribute value no end \''+c+'\' match');
- }
- }else if(s == S_ATTR_NOQUOT_VALUE){
- value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-
- el.add(attrName,value,start);
-
- errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
- start = p+1;
- s = S_ATTR_END
- }else{
-
- throw new Error('attribute value must after "="');
- }
- break;
- case '/':
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));
- case S_ATTR_END:
- case S_TAG_SPACE:
- case S_TAG_CLOSE:
- s =S_TAG_CLOSE;
- el.closed = true;
- case S_ATTR_NOQUOT_VALUE:
- case S_ATTR:
- case S_ATTR_SPACE:
- break;
-
- default:
- throw new Error("attribute invalid close char('/')")
- }
- break;
- case '':
-
- errorHandler.error('unexpected end of input');
- if(s == S_TAG){
- el.setTagName(source.slice(start,p));
- }
- return p;
- case '>':
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));
- case S_ATTR_END:
- case S_TAG_SPACE:
- case S_TAG_CLOSE:
- break;
- case S_ATTR_NOQUOT_VALUE:
- case S_ATTR:
- value = source.slice(start,p);
- if(value.slice(-1) === '/'){
- el.closed = true;
- value = value.slice(0,-1)
- }
- case S_ATTR_SPACE:
- if(s === S_ATTR_SPACE){
- value = attrName;
- }
- if(s == S_ATTR_NOQUOT_VALUE){
- errorHandler.warning('attribute "'+value+'" missed quot(")!!');
- el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
- }else{
- if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
- errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
- }
- el.add(value,value,start)
- }
- break;
- case S_EQ:
- throw new Error('attribute value missed!!');
- }
- return p;
-
- case '\u0080':
- c = ' ';
- default:
- if(c<= ' '){
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));
- s = S_TAG_SPACE;
- break;
- case S_ATTR:
- attrName = source.slice(start,p)
- s = S_ATTR_SPACE;
- break;
- case S_ATTR_NOQUOT_VALUE:
- var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
- errorHandler.warning('attribute "'+value+'" missed quot(")!!');
- el.add(attrName,value,start)
- case S_ATTR_END:
- s = S_TAG_SPACE;
- break;
-
-
-
-
-
-
- }
- }else{
- switch(s){
-
-
-
- case S_ATTR_SPACE:
- var tagName = el.tagName;
- if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
- errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!')
- }
- el.add(attrName,attrName,start);
- start = p;
- s = S_ATTR;
- break;
- case S_ATTR_END:
- errorHandler.warning('attribute space is required"'+attrName+'"!!')
- case S_TAG_SPACE:
- s = S_ATTR;
- start = p;
- break;
- case S_EQ:
- s = S_ATTR_NOQUOT_VALUE;
- start = p;
- break;
- case S_TAG_CLOSE:
- throw new Error("elements closed character '/' and '>' must be connected to");
- }
- }
- }
-
- p++;
- }
- }
- function appendElement(el,domBuilder,currentNSMap){
- var tagName = el.tagName;
- var localNSMap = null;
-
- var i = el.length;
- while(i--){
- var a = el[i];
- var qName = a.qName;
- var value = a.value;
- var nsp = qName.indexOf(':');
- if(nsp>0){
- var prefix = a.prefix = qName.slice(0,nsp);
- var localName = qName.slice(nsp+1);
- var nsPrefix = prefix === 'xmlns' && localName
- }else{
- localName = qName;
- prefix = null
- nsPrefix = qName === 'xmlns' && ''
- }
-
- a.localName = localName ;
-
- if(nsPrefix !== false){
- if(localNSMap == null){
- localNSMap = {}
-
- _copy(currentNSMap,currentNSMap={})
-
- }
- currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
- a.uri = 'http://www.w3.org/2000/xmlns/'
- domBuilder.startPrefixMapping(nsPrefix, value)
- }
- }
- var i = el.length;
- while(i--){
- a = el[i];
- var prefix = a.prefix;
- if(prefix){
- if(prefix === 'xml'){
- a.uri = 'http://www.w3.org/XML/1998/namespace';
- }if(prefix !== 'xmlns'){
- a.uri = currentNSMap[prefix || '']
-
-
- }
- }
- }
- var nsp = tagName.indexOf(':');
- if(nsp>0){
- prefix = el.prefix = tagName.slice(0,nsp);
- localName = el.localName = tagName.slice(nsp+1);
- }else{
- prefix = null;
- localName = el.localName = tagName;
- }
-
- var ns = el.uri = currentNSMap[prefix || ''];
- domBuilder.startElement(ns,localName,tagName,el);
-
-
- if(el.closed){
- domBuilder.endElement(ns,localName,tagName);
- if(localNSMap){
- for(prefix in localNSMap){
- domBuilder.endPrefixMapping(prefix)
- }
- }
- }else{
- el.currentNSMap = currentNSMap;
- el.localNSMap = localNSMap;
-
- return true;
- }
- }
- function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
- if(/^(?:script|textarea)$/i.test(tagName)){
- var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
- var text = source.substring(elStartEnd+1,elEndStart);
- if(/[&<]/.test(text)){
- if(/^script$/i.test(tagName)){
-
-
- domBuilder.characters(text,0,text.length);
-
- return elEndStart;
-
- }
- text = text.replace(/&#?\w+;/g,entityReplacer);
- domBuilder.characters(text,0,text.length);
- return elEndStart;
-
-
- }
- }
- return elStartEnd+1;
- }
- function fixSelfClosed(source,elStartEnd,tagName,closeMap){
-
- var pos = closeMap[tagName];
- if(pos == null){
-
- pos = source.lastIndexOf('</'+tagName+'>')
- if(pos<elStartEnd){
- pos = source.lastIndexOf('</'+tagName)
- }
- closeMap[tagName] =pos
- }
- return pos<elStartEnd;
-
- }
- function _copy(source,target){
- for(var n in source){target[n] = source[n]}
- }
- function parseDCC(source,start,domBuilder,errorHandler){
- var next= source.charAt(start+2)
- switch(next){
- case '-':
- if(source.charAt(start + 3) === '-'){
- var end = source.indexOf('-->',start+4);
-
- if(end>start){
- domBuilder.comment(source,start+4,end-start-4);
- return end+3;
- }else{
- errorHandler.error("Unclosed comment");
- return -1;
- }
- }else{
-
- return -1;
- }
- default:
- if(source.substr(start+3,6) == 'CDATA['){
- var end = source.indexOf(']]>',start+9);
- domBuilder.startCDATA();
- domBuilder.characters(source,start+9,end-start-9);
- domBuilder.endCDATA()
- return end+3;
- }
-
-
- var matchs = split(source,start);
- var len = matchs.length;
- if(len>1 && /!doctype/i.test(matchs[0][0])){
- var name = matchs[1][0];
- var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]
- var sysid = len>4 && matchs[4][0];
- var lastMatch = matchs[len-1]
- domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
- sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
- domBuilder.endDTD();
-
- return lastMatch.index+lastMatch[0].length
- }
- }
- return -1;
- }
- function parseInstruction(source,start,domBuilder){
- var end = source.indexOf('?>',start);
- if(end){
- var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
- if(match){
- var len = match[0].length;
- domBuilder.processingInstruction(match[1], match[2]) ;
- return end+2;
- }else{
- return -1;
- }
- }
- return -1;
- }
- function ElementAttributes(source){
-
- }
- ElementAttributes.prototype = {
- setTagName:function(tagName){
- if(!tagNamePattern.test(tagName)){
- throw new Error('invalid tagName:'+tagName)
- }
- this.tagName = tagName
- },
- add:function(qName,value,offset){
- if(!tagNamePattern.test(qName)){
- throw new Error('invalid attribute:'+qName)
- }
- this[this.length++] = {qName:qName,value:value,offset:offset}
- },
- length:0,
- getLocalName:function(i){return this[i].localName},
- getLocator:function(i){return this[i].locator},
- getQName:function(i){return this[i].qName},
- getURI:function(i){return this[i].uri},
- getValue:function(i){return this[i].value}
- }
- function _set_proto_(thiz,parent){
- thiz.__proto__ = parent;
- return thiz;
- }
- if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
- _set_proto_ = function(thiz,parent){
- function p(){};
- p.prototype = parent;
- p = new p();
- for(parent in thiz){
- p[parent] = thiz[parent];
- }
- return p;
- }
- }
- function split(source,start){
- var match;
- var buf = [];
- var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
- reg.lastIndex = start;
- reg.exec(source);
- while(match = reg.exec(source)){
- buf.push(match);
- if(match[1])return buf;
- }
- }
- exports.XMLReader = XMLReader;
- }),
- (function(module, exports) {
- var element_start_char = "a-zA-Z_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FFF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD";
- var element_non_start_char = "\-.0-9\u00B7\u0300-\u036F\u203F\u2040";
- var element_replace = new RegExp("^([^" + element_start_char + "])|^((x|X)(m|M)(l|L))|([^" + element_start_char + element_non_start_char + "])", "g");
- var not_safe_in_xml = /[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm;
- var objKeys = function (obj) {
- var l = [];
- if (obj instanceof Object) {
- for (var k in obj) {
- if (obj.hasOwnProperty(k)) {
- l.push(k);
- }
- }
- }
- return l;
- };
- var process_to_xml = function (node_data, options) {
- var makeNode = function (name, content, attributes, level, hasSubNodes) {
- var indent_value = options.indent !== undefined ? options.indent : "\t";
- var indent = options.prettyPrint ? '\n' + new Array(level).join(indent_value) : '';
- if (options.removeIllegalNameCharacters) {
- name = name.replace(element_replace, '_');
- }
- var node = [indent, '<', name, attributes || ''];
- if (content && content.length > 0) {
- node.push('>');
- node.push(content);
- hasSubNodes && node.push(indent);
- node.push('</');
- node.push(name);
- node.push('>');
- } else {
- node.push('/>');
- }
- return node.join('');
- };
- return function fn(node_data, node_descriptor, level) {
- var type = typeof node_data;
- if (Array.isArray ? Array.isArray(node_data) : node_data instanceof Array) {
- type = 'array';
- } else if (node_data instanceof Date) {
- type = 'date';
- }
- switch (type) {
-
- case 'array':
- var ret = [];
- node_data.map(function (v) {
- ret.push(fn(v, 1, level + 1));
-
- });
- options.prettyPrint && ret.push('\n');
- return ret.join('');
- break;
- case 'date':
-
- return node_data.toJSON ? node_data.toJSON() : node_data + '';
- break;
- case 'object':
- var nodes = [];
- for (var name in node_data) {
- if (node_data.hasOwnProperty(name)) {
- if (node_data[name] instanceof Array) {
- for (var j = 0; j < node_data[name].length; j++) {
- if (node_data[name].hasOwnProperty(j)) {
- nodes.push(makeNode(name, fn(node_data[name][j], 0, level + 1), null, level + 1, objKeys(node_data[name][j]).length));
- }
- }
- } else {
- nodes.push(makeNode(name, fn(node_data[name], 0, level + 1), null, level + 1));
- }
- }
- }
- options.prettyPrint && nodes.length > 0 && nodes.push('\n');
- return nodes.join('');
- break;
- case 'function':
- return node_data();
- break;
- default:
- return options.escape ? esc(node_data) : '' + node_data;
- }
- }(node_data, 0, 0);
- };
- var xml_header = function (standalone) {
- var ret = ['<?xml version="1.0" encoding="UTF-8"'];
- if (standalone) {
- ret.push(' standalone="yes"');
- }
- ret.push('?>');
- return ret.join('');
- };
- function esc(str) {
- return ('' + str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/'/g, ''').replace(/"/g, '"').replace(not_safe_in_xml, '');
- }
- module.exports = function (obj, options) {
- if (!options) {
- options = {
- xmlHeader: {
- standalone: true
- },
- prettyPrint: true,
- indent: " ",
- escape: true
- };
- }
- if (typeof obj == 'string') {
- try {
- obj = JSON.parse(obj.toString());
- } catch (e) {
- return false;
- }
- }
- var xmlheader = '';
- var docType = '';
- if (options) {
- if (typeof options == 'object') {
-
- if (options.xmlHeader) {
-
- xmlheader = xml_header(!!options.xmlHeader.standalone);
- }
- if (typeof options.docType != 'undefined') {
- docType = '<!DOCTYPE ' + options.docType + '>';
- }
- } else {
-
- xmlheader = xml_header();
- }
- }
- options = options || {};
- var ret = [xmlheader, options.prettyPrint && docType ? '\n' : '', docType, process_to_xml(obj, options)];
- return ret.join('').replace(/\n{2,}/g, '\n').replace(/\s+$/g, '');
- };
- }),
- (function(module, exports, __webpack_require__) {
- var session = __webpack_require__(4);
- var util = __webpack_require__(0);
- var originApiMap = {};
- var transferToTaskMethod = function (apiMap, apiName) {
- originApiMap[apiName] = apiMap[apiName];
- apiMap[apiName] = function (params, callback) {
- if (params.SkipTask) {
- originApiMap[apiName].call(this, params, callback);
- } else {
- this._addTask(apiName, params, callback);
- }
- };
- };
- var initTask = function (cos) {
- var queue = [];
- var tasks = {};
- var uploadingFileCount = 0;
- var nextUploadIndex = 0;
-
- var formatTask = function (task) {
- var t = {
- id: task.id,
- Bucket: task.Bucket,
- Region: task.Region,
- Key: task.Key,
- FilePath: task.FilePath,
- state: task.state,
- loaded: task.loaded,
- size: task.size,
- speed: task.speed,
- percent: task.percent,
- hashPercent: task.hashPercent,
- error: task.error
- };
- if (task.FilePath) t.FilePath = task.FilePath;
- if (task._custom) t._custom = task._custom;
- return t;
- };
- var emitListUpdate = function () {
- var timer;
- var emit = function () {
- timer = 0;
- cos.emit('task-list-update', { list: util.map(queue, formatTask) });
- cos.emit('list-update', { list: util.map(queue, formatTask) });
- };
- return function () {
- if (!timer) timer = setTimeout(emit);
- };
- }();
- var clearQueue = function () {
- if (queue.length <= cos.options.UploadQueueSize) return;
- for (var i = 0; i < nextUploadIndex &&
- i < queue.length &&
- queue.length > cos.options.UploadQueueSize
- ;) {
- var isActive = queue[i].state === 'waiting' || queue[i].state === 'checking' || queue[i].state === 'uploading';
- if (!queue[i] || !isActive) {
- tasks[queue[i].id] && delete tasks[queue[i].id];
- queue.splice(i, 1);
- nextUploadIndex--;
- } else {
- i++;
- }
- }
- emitListUpdate();
- };
- var startNextTask = function () {
-
- if (uploadingFileCount >= cos.options.FileParallelLimit) return;
-
- while (queue[nextUploadIndex] && queue[nextUploadIndex].state !== 'waiting') nextUploadIndex++;
-
- if (nextUploadIndex >= queue.length) return;
-
- var task = queue[nextUploadIndex];
- nextUploadIndex++;
- uploadingFileCount++;
- task.state = 'checking';
- task.params.onTaskStart && task.params.onTaskStart(formatTask(task));
- !task.params.UploadData && (task.params.UploadData = {});
- var apiParams = util.formatParams(task.api, task.params);
- originApiMap[task.api].call(cos, apiParams, function (err, data) {
- if (!cos._isRunningTask(task.id)) return;
- if (task.state === 'checking' || task.state === 'uploading') {
- task.state = err ? 'error' : 'success';
- err && (task.error = err);
- uploadingFileCount--;
- emitListUpdate();
- startNextTask();
- task.callback && task.callback(err, data);
- if (task.state === 'success') {
- if (task.params) {
- delete task.params.UploadData;
- delete task.params.Body;
- delete task.params;
- }
- delete task.callback;
- }
- }
- clearQueue();
- });
- emitListUpdate();
-
- setTimeout(startNextTask);
- };
- var killTask = function (id, switchToState) {
- var task = tasks[id];
- if (!task) return;
- var waiting = task && task.state === 'waiting';
- var running = task && (task.state === 'checking' || task.state === 'uploading');
- if (switchToState === 'canceled' && task.state !== 'canceled' || switchToState === 'paused' && waiting || switchToState === 'paused' && running) {
- if (switchToState === 'paused' && task.params.Body && typeof task.params.Body.pipe === 'function') {
- console.error('stream not support pause');
- return;
- }
- task.state = switchToState;
- cos.emit('inner-kill-task', { TaskId: id, toState: switchToState });
- try {
- var UploadId = task && task.params && task.params.UploadData.UploadId;
- } catch (e) {}
- if (switchToState === 'canceled' && UploadId) session.removeUsing(UploadId);
- emitListUpdate();
- if (running) {
- uploadingFileCount--;
- startNextTask();
- }
- if (switchToState === 'canceled') {
- if (task.params) {
- delete task.params.UploadData;
- delete task.params.Body;
- delete task.params;
- }
- delete task.callback;
- }
- }
- clearQueue();
- };
- cos._addTasks = function (taskList) {
- util.each(taskList, function (task) {
- cos._addTask(task.api, task.params, task.callback, true);
- });
- emitListUpdate();
- };
- var isTaskReadyWarning = true;
- cos._addTask = function (api, params, callback, ignoreAddEvent) {
-
- params = util.formatParams(api, params);
-
- var id = util.uuid();
- params.TaskId = id;
- params.onTaskReady && params.onTaskReady(id);
- if (params.TaskReady) {
- params.TaskReady(id);
- isTaskReadyWarning && console.warn('warning: Param "TaskReady" has been deprecated. Please use "onTaskReady" instead.');
- isTaskReadyWarning = false;
- }
- var task = {
-
- params: params,
- callback: callback,
- api: api,
- index: queue.length,
-
- id: id,
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- FilePath: params.FilePath || '',
- state: 'waiting',
- loaded: 0,
- size: 0,
- speed: 0,
- percent: 0,
- hashPercent: 0,
- error: null,
- _custom: params._custom
- };
- var onHashProgress = params.onHashProgress;
- params.onHashProgress = function (info) {
- if (!cos._isRunningTask(task.id)) return;
- task.hashPercent = info.percent;
- onHashProgress && onHashProgress(info);
- emitListUpdate();
- };
- var onProgress = params.onProgress;
- params.onProgress = function (info) {
- if (!cos._isRunningTask(task.id)) return;
- task.state === 'checking' && (task.state = 'uploading');
- task.loaded = info.loaded;
- task.speed = info.speed;
- task.percent = info.percent;
- onProgress && onProgress(info);
- emitListUpdate();
- };
-
- util.getFileSize(api, params, function (err, size) {
-
- if (err) return callback(util.error(err));
-
- tasks[id] = task;
- queue.push(task);
- task.size = size;
- !ignoreAddEvent && emitListUpdate();
- startNextTask();
- clearQueue();
- });
- return id;
- };
- cos._isRunningTask = function (id) {
- var task = tasks[id];
- return !!(task && (task.state === 'checking' || task.state === 'uploading'));
- };
- cos.getTaskList = function () {
- return util.map(queue, formatTask);
- };
- cos.cancelTask = function (id) {
- killTask(id, 'canceled');
- };
- cos.pauseTask = function (id) {
- killTask(id, 'paused');
- };
- cos.restartTask = function (id) {
- var task = tasks[id];
- if (task && (task.state === 'paused' || task.state === 'error')) {
- task.state = 'waiting';
- emitListUpdate();
- nextUploadIndex = Math.min(nextUploadIndex, task.index);
- startNextTask();
- }
- };
- cos.isUploadRunning = function () {
- return uploadingFileCount || nextUploadIndex < queue.length;
- };
- };
- module.exports.transferToTaskMethod = transferToTaskMethod;
- module.exports.init = initTask;
- }),
- (function(module, exports, __webpack_require__) {
- var REQUEST = __webpack_require__(17);
- var util = __webpack_require__(0);
- function getService(params, callback) {
- if (typeof params === 'function') {
- callback = params;
- params = {};
- }
- var protocol = this.options.Protocol || (util.isBrowser && location.protocol === 'http:' ? 'http:' : 'https:');
- var domain = this.options.ServiceDomain;
- var appId = params.AppId || this.options.appId;
- var region = params.Region;
- if (domain) {
- domain = domain.replace(/\{\{AppId\}\}/ig, appId || '').replace(/\{\{Region\}\}/ig, region || '').replace(/\{\{.*?\}\}/ig, '');
- if (!/^[a-zA-Z]+:\/\//.test(domain)) {
- domain = protocol + '//' + domain;
- }
- if (domain.slice(-1) === '/') {
- domain = domain.slice(0, -1);
- }
- } else if (region) {
- domain = protocol + '//cos.' + region + '.myqcloud.com';
- } else {
- domain = protocol + '//service.cos.myqcloud.com';
- }
- submitRequest.call(this, {
- Action: 'name/cos:GetService',
- url: domain,
- method: 'GET',
- headers: params.Headers
- }, function (err, data) {
- if (err) return callback(err);
- var buckets = data && data.ListAllMyBucketsResult && data.ListAllMyBucketsResult.Buckets && data.ListAllMyBucketsResult.Buckets.Bucket || [];
- buckets = util.isArray(buckets) ? buckets : [buckets];
- var owner = data && data.ListAllMyBucketsResult && data.ListAllMyBucketsResult.Owner || {};
- callback(null, {
- Buckets: buckets,
- Owner: owner,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucket(params, callback) {
- var self = this;
- var xml = '';
- if (params['BucketAZConfig']) {
- var CreateBucketConfiguration = {
- BucketAZConfig: params.BucketAZConfig
- };
- xml = util.json2xml({ CreateBucketConfiguration: CreateBucketConfiguration });
- }
- submitRequest.call(this, {
- Action: 'name/cos:PutBucket',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- body: xml
- }, function (err, data) {
- if (err) return callback(err);
- var url = getUrl({
- protocol: self.options.Protocol,
- domain: self.options.Domain,
- bucket: params.Bucket,
- region: params.Region,
- isLocation: true
- });
- callback(null, {
- Location: url,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function headBucket(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:HeadBucket',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- method: 'HEAD'
- }, callback);
- }
- function getBucket(params, callback) {
- var reqParams = {};
- reqParams['prefix'] = params['Prefix'] || '';
- reqParams['delimiter'] = params['Delimiter'];
- reqParams['marker'] = params['Marker'];
- reqParams['max-keys'] = params['MaxKeys'];
- reqParams['encoding-type'] = params['EncodingType'];
- submitRequest.call(this, {
- Action: 'name/cos:GetBucket',
- ResourceKey: reqParams['prefix'],
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- qs: reqParams
- }, function (err, data) {
- if (err) return callback(err);
- var ListBucketResult = data.ListBucketResult || {};
- var Contents = ListBucketResult.Contents || [];
- var CommonPrefixes = ListBucketResult.CommonPrefixes || [];
- Contents = util.isArray(Contents) ? Contents : [Contents];
- CommonPrefixes = util.isArray(CommonPrefixes) ? CommonPrefixes : [CommonPrefixes];
- var result = util.clone(ListBucketResult);
- util.extend(result, {
- Contents: Contents,
- CommonPrefixes: CommonPrefixes,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function deleteBucket(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucket',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- method: 'DELETE'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketAcl(params, callback) {
- var headers = params.Headers;
- var xml = '';
- if (params['AccessControlPolicy']) {
- var AccessControlPolicy = util.clone(params['AccessControlPolicy'] || {});
- var Grants = AccessControlPolicy.Grants || AccessControlPolicy.Grant;
- Grants = util.isArray(Grants) ? Grants : [Grants];
- delete AccessControlPolicy.Grant;
- delete AccessControlPolicy.Grants;
- AccessControlPolicy.AccessControlList = { Grant: Grants };
- xml = util.json2xml({ AccessControlPolicy: AccessControlPolicy });
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- }
-
- util.each(headers, function (val, key) {
- if (key.indexOf('x-cos-grant-') === 0) {
- headers[key] = uniqGrant(headers[key]);
- }
- });
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketACL',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: headers,
- action: 'acl',
- body: xml
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketAcl(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketACL',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'acl'
- }, function (err, data) {
- if (err) return callback(err);
- var AccessControlPolicy = data.AccessControlPolicy || {};
- var Owner = AccessControlPolicy.Owner || {};
- var Grant = AccessControlPolicy.AccessControlList.Grant || [];
- Grant = util.isArray(Grant) ? Grant : [Grant];
- var result = decodeAcl(AccessControlPolicy);
- if (data.headers && data.headers['x-cos-acl']) {
- result.ACL = data.headers['x-cos-acl'];
- }
- result = util.extend(result, {
- Owner: Owner,
- Grants: Grant,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function putBucketCors(params, callback) {
- var CORSConfiguration = params['CORSConfiguration'] || {};
- var CORSRules = CORSConfiguration['CORSRules'] || params['CORSRules'] || [];
- CORSRules = util.clone(util.isArray(CORSRules) ? CORSRules : [CORSRules]);
- util.each(CORSRules, function (rule) {
- util.each(['AllowedOrigin', 'AllowedHeader', 'AllowedMethod', 'ExposeHeader'], function (key) {
- var sKey = key + 's';
- var val = rule[sKey] || rule[key] || [];
- delete rule[sKey];
- rule[key] = util.isArray(val) ? val : [val];
- });
- });
- var xml = util.json2xml({ CORSConfiguration: { CORSRule: CORSRules } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketCORS',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'cors',
- headers: headers
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketCors(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketCORS',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'cors'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error && err.error.Code === 'NoSuchCORSConfiguration') {
- var result = {
- CORSRules: [],
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var CORSConfiguration = data.CORSConfiguration || {};
- var CORSRules = CORSConfiguration.CORSRules || CORSConfiguration.CORSRule || [];
- CORSRules = util.clone(util.isArray(CORSRules) ? CORSRules : [CORSRules]);
- util.each(CORSRules, function (rule) {
- util.each(['AllowedOrigin', 'AllowedHeader', 'AllowedMethod', 'ExposeHeader'], function (key) {
- var sKey = key + 's';
- var val = rule[sKey] || rule[key] || [];
- delete rule[key];
- rule[sKey] = util.isArray(val) ? val : [val];
- });
- });
- callback(null, {
- CORSRules: CORSRules,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketCors(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketCORS',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'cors'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode || err.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketLocation(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketLocation',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'location'
- }, callback);
- }
- function putBucketPolicy(params, callback) {
- var Policy = params['Policy'];
- try {
- if (typeof Policy === 'string') Policy = JSON.parse(Policy);
- } catch (e) {}
- if (!Policy || typeof Policy === 'string') return callback(util.error(new Error('Policy format error')));
- var PolicyStr = JSON.stringify(Policy);
- if (!Policy.version) Policy.version = '2.0';
- var headers = params.Headers;
- headers['Content-Type'] = 'application/json';
- headers['Content-MD5'] = util.binaryBase64(util.md5(PolicyStr));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketPolicy',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- action: 'policy',
- body: PolicyStr,
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketPolicy(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketPolicy',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'policy',
- rawBody: true
- }, function (err, data) {
- if (err) {
- if (err.statusCode && err.statusCode === 403) {
- return callback(util.error(err, { ErrorStatus: 'Access Denied' }));
- }
- if (err.statusCode && err.statusCode === 405) {
- return callback(util.error(err, { ErrorStatus: 'Method Not Allowed' }));
- }
- if (err.statusCode && err.statusCode === 404) {
- return callback(util.error(err, { ErrorStatus: 'Policy Not Found' }));
- }
- return callback(err);
- }
- var Policy = {};
- try {
- Policy = JSON.parse(data.body);
- } catch (e) {}
- callback(null, {
- Policy: Policy,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketPolicy(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketPolicy',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'policy'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode || err.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketTagging(params, callback) {
- var Tagging = params['Tagging'] || {};
- var Tags = Tagging.TagSet || Tagging.Tags || params['Tags'] || [];
- Tags = util.clone(util.isArray(Tags) ? Tags : [Tags]);
- var xml = util.json2xml({ Tagging: { TagSet: { Tag: Tags } } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketTagging',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'tagging',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketTagging(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketTagging',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'tagging'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error && (err.error === "Not Found" || err.error.Code === 'NoSuchTagSet')) {
- var result = {
- Tags: [],
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var Tags = [];
- try {
- Tags = data.Tagging.TagSet.Tag || [];
- } catch (e) {}
- Tags = util.clone(util.isArray(Tags) ? Tags : [Tags]);
- callback(null, {
- Tags: Tags,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketTagging(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketTagging',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'tagging'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketLifecycle(params, callback) {
- var LifecycleConfiguration = params['LifecycleConfiguration'] || {};
- var Rules = LifecycleConfiguration.Rules || params.Rules || [];
- Rules = util.clone(Rules);
- var xml = util.json2xml({ LifecycleConfiguration: { Rule: Rules } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketLifecycle',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'lifecycle',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketLifecycle(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketLifecycle',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'lifecycle'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error && err.error.Code === 'NoSuchLifecycleConfiguration') {
- var result = {
- Rules: [],
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var Rules = [];
- try {
- Rules = data.LifecycleConfiguration.Rule || [];
- } catch (e) {}
- Rules = util.clone(util.isArray(Rules) ? Rules : [Rules]);
- callback(null, {
- Rules: Rules,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketLifecycle(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketLifecycle',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'lifecycle'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketVersioning(params, callback) {
- if (!params['VersioningConfiguration']) {
- callback(util.error(new Error('missing param VersioningConfiguration')));
- return;
- }
- var VersioningConfiguration = params['VersioningConfiguration'] || {};
- var xml = util.json2xml({ VersioningConfiguration: VersioningConfiguration });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketVersioning',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'versioning',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketVersioning(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketVersioning',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'versioning'
- }, function (err, data) {
- if (!err) {
- !data.VersioningConfiguration && (data.VersioningConfiguration = {});
- }
- callback(err, data);
- });
- }
- function putBucketReplication(params, callback) {
- var ReplicationConfiguration = util.clone(params.ReplicationConfiguration);
- var xml = util.json2xml({ ReplicationConfiguration: ReplicationConfiguration });
- xml = xml.replace(/<(\/?)Rules>/ig, '<$1Rule>');
- xml = xml.replace(/<(\/?)Tags>/ig, '<$1Tag>');
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketReplication',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'replication',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketReplication(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketReplication',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'replication'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error && (err.error === 'Not Found' || err.error.Code === 'ReplicationConfigurationnotFoundError')) {
- var result = {
- ReplicationConfiguration: { Rules: [] },
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- !data.ReplicationConfiguration && (data.ReplicationConfiguration = {});
- if (data.ReplicationConfiguration.Rule) {
- data.ReplicationConfiguration.Rules = util.makeArray(data.ReplicationConfiguration.Rule);
- delete data.ReplicationConfiguration.Rule;
- }
- callback(err, data);
- });
- }
- function deleteBucketReplication(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketReplication',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'replication'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketWebsite(params, callback) {
- if (!params['WebsiteConfiguration']) {
- callback(util.error(new Error('missing param WebsiteConfiguration')));
- return;
- }
- var WebsiteConfiguration = util.clone(params['WebsiteConfiguration'] || {});
- var RoutingRules = WebsiteConfiguration['RoutingRules'] || WebsiteConfiguration['RoutingRule'] || [];
- RoutingRules = util.isArray(RoutingRules) ? RoutingRules : [RoutingRules];
- delete WebsiteConfiguration.RoutingRule;
- delete WebsiteConfiguration.RoutingRules;
- if (RoutingRules.length) WebsiteConfiguration.RoutingRules = { RoutingRule: RoutingRules };
- var xml = util.json2xml({ WebsiteConfiguration: WebsiteConfiguration });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketWebsite',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'website',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketWebsite(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketWebsite',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- action: 'website'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error.Code === 'NoSuchWebsiteConfiguration') {
- var result = {
- WebsiteConfiguration: {},
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var WebsiteConfiguration = data.WebsiteConfiguration || {};
- if (WebsiteConfiguration['RoutingRules']) {
- var RoutingRules = util.clone(WebsiteConfiguration['RoutingRules'].RoutingRule || []);
- RoutingRules = util.makeArray(RoutingRules);
- WebsiteConfiguration.RoutingRules = RoutingRules;
- }
- callback(null, {
- WebsiteConfiguration: WebsiteConfiguration,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketWebsite(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketWebsite',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'website'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketReferer(params, callback) {
- if (!params['RefererConfiguration']) {
- callback(util.error(new Error('missing param RefererConfiguration')));
- return;
- }
- var RefererConfiguration = util.clone(params['RefererConfiguration'] || {});
- var DomainList = RefererConfiguration['DomainList'] || {};
- var Domains = DomainList['Domains'] || DomainList['Domain'] || [];
- Domains = util.isArray(Domains) ? Domains : [Domains];
- if (Domains.length) RefererConfiguration.DomainList = { Domain: Domains };
- var xml = util.json2xml({ RefererConfiguration: RefererConfiguration });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketReferer',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'referer',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketReferer(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketReferer',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- action: 'referer'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error.Code === 'NoSuchRefererConfiguration') {
- var result = {
- WebsiteConfiguration: {},
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var RefererConfiguration = data.RefererConfiguration || {};
- if (RefererConfiguration['DomainList']) {
- var Domains = util.makeArray(RefererConfiguration['DomainList'].Domain || []);
- RefererConfiguration.DomainList = { Domains: Domains };
- }
- callback(null, {
- RefererConfiguration: RefererConfiguration,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketDomain(params, callback) {
- var DomainConfiguration = params['DomainConfiguration'] || {};
- var DomainRule = DomainConfiguration.DomainRule || params.DomainRule || [];
- DomainRule = util.clone(DomainRule);
- var xml = util.json2xml({ DomainConfiguration: { DomainRule: DomainRule } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketDomain',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'domain',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketDomain(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketDomain',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'domain'
- }, function (err, data) {
- if (err) return callback(err);
- var DomainRule = [];
- try {
- DomainRule = data.DomainConfiguration.DomainRule || [];
- } catch (e) {}
- DomainRule = util.clone(util.isArray(DomainRule) ? DomainRule : [DomainRule]);
- callback(null, {
- DomainRule: DomainRule,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketDomain(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketDomain',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'domain'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketOrigin(params, callback) {
- var OriginConfiguration = params['OriginConfiguration'] || {};
- var OriginRule = OriginConfiguration.OriginRule || params.OriginRule || [];
- OriginRule = util.clone(OriginRule);
- var xml = util.json2xml({ OriginConfiguration: { OriginRule: OriginRule } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketOrigin',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'origin',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketOrigin(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketOrigin',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'origin'
- }, function (err, data) {
- if (err) return callback(err);
- var OriginRule = [];
- try {
- OriginRule = data.OriginConfiguration.OriginRule || [];
- } catch (e) {}
- OriginRule = util.clone(util.isArray(OriginRule) ? OriginRule : [OriginRule]);
- callback(null, {
- OriginRule: OriginRule,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteBucketOrigin(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketOrigin',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'origin'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketLogging(params, callback) {
- var xml = util.json2xml({
- BucketLoggingStatus: params['BucketLoggingStatus'] || ''
- });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketLogging',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'logging',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketLogging(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketLogging',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'logging'
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- BucketLoggingStatus: data.BucketLoggingStatus,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketInventory(params, callback) {
- var InventoryConfiguration = util.clone(params['InventoryConfiguration']);
- if (InventoryConfiguration.OptionalFields) {
- var Field = InventoryConfiguration.OptionalFields || [];
- InventoryConfiguration.OptionalFields = {
- Field: Field
- };
- }
- if (InventoryConfiguration.Destination && InventoryConfiguration.Destination.COSBucketDestination && InventoryConfiguration.Destination.COSBucketDestination.Encryption) {
- var Encryption = InventoryConfiguration.Destination.COSBucketDestination.Encryption;
- if (Object.keys(Encryption).indexOf('SSECOS') > -1) {
- Encryption['SSE-COS'] = Encryption['SSECOS'];
- delete Encryption['SSECOS'];
- }
- }
- var xml = util.json2xml({
- InventoryConfiguration: InventoryConfiguration
- });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketInventory',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'inventory',
- qs: {
- id: params['Id']
- },
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketInventory(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketInventory',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'inventory',
- qs: {
- id: params['Id']
- }
- }, function (err, data) {
- if (err) return callback(err);
- var InventoryConfiguration = data['InventoryConfiguration'];
- if (InventoryConfiguration && InventoryConfiguration.OptionalFields && InventoryConfiguration.OptionalFields.Field) {
- var Field = InventoryConfiguration.OptionalFields.Field;
- if (!util.isArray(Field)) {
- Field = [Field];
- }
- InventoryConfiguration.OptionalFields = Field;
- }
- if (InventoryConfiguration.Destination && InventoryConfiguration.Destination.COSBucketDestination && InventoryConfiguration.Destination.COSBucketDestination.Encryption) {
- var Encryption = InventoryConfiguration.Destination.COSBucketDestination.Encryption;
- if (Object.keys(Encryption).indexOf('SSE-COS') > -1) {
- Encryption['SSECOS'] = Encryption['SSE-COS'];
- delete Encryption['SSE-COS'];
- }
- }
- callback(null, {
- InventoryConfiguration: InventoryConfiguration,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function listBucketInventory(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:ListBucketInventory',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'inventory',
- qs: {
- 'continuation-token': params['ContinuationToken']
- }
- }, function (err, data) {
- if (err) return callback(err);
- var ListInventoryConfigurationResult = data['ListInventoryConfigurationResult'];
- var InventoryConfigurations = ListInventoryConfigurationResult.InventoryConfiguration || [];
- InventoryConfigurations = util.isArray(InventoryConfigurations) ? InventoryConfigurations : [InventoryConfigurations];
- delete ListInventoryConfigurationResult['InventoryConfiguration'];
- util.each(InventoryConfigurations, function (InventoryConfiguration) {
- if (InventoryConfiguration && InventoryConfiguration.OptionalFields && InventoryConfiguration.OptionalFields.Field) {
- var Field = InventoryConfiguration.OptionalFields.Field;
- if (!util.isArray(Field)) {
- Field = [Field];
- }
- InventoryConfiguration.OptionalFields = Field;
- }
- if (InventoryConfiguration.Destination && InventoryConfiguration.Destination.COSBucketDestination && InventoryConfiguration.Destination.COSBucketDestination.Encryption) {
- var Encryption = InventoryConfiguration.Destination.COSBucketDestination.Encryption;
- if (Object.keys(Encryption).indexOf('SSE-COS') > -1) {
- Encryption['SSECOS'] = Encryption['SSE-COS'];
- delete Encryption['SSE-COS'];
- }
- }
- });
- ListInventoryConfigurationResult.InventoryConfigurations = InventoryConfigurations;
- util.extend(ListInventoryConfigurationResult, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, ListInventoryConfigurationResult);
- });
- }
- function deleteBucketInventory(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketInventory',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'inventory',
- qs: {
- id: params['Id']
- }
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putBucketAccelerate(params, callback) {
- if (!params['AccelerateConfiguration']) {
- callback(util.error(new Error('missing param AccelerateConfiguration')));
- return;
- }
- var configuration = { AccelerateConfiguration: params.AccelerateConfiguration || {} };
- var xml = util.json2xml(configuration);
- var headers = {};
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketAccelerate',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'accelerate',
- headers: headers
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketAccelerate(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketAccelerate',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- action: 'accelerate'
- }, function (err, data) {
- if (!err) {
- !data.AccelerateConfiguration && (data.AccelerateConfiguration = {});
- }
- callback(err, data);
- });
- }
- function putBucketEncryption(params, callback) {
- var conf = params.ServerSideEncryptionConfiguration || {};
- var Rules = conf.Rule || conf.Rules || [];
- var xml = util.json2xml({ ServerSideEncryptionConfiguration: { Rule: Rules } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutBucketEncryption',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'encryption',
- headers: headers
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getBucketEncryption(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketEncryption',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'encryption'
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.code === 'NoSuchEncryptionConfiguration') {
- var result = {
- EncryptionConfiguration: { Rules: [] },
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var Rules = util.makeArray(data.EncryptionConfiguration && data.EncryptionConfiguration.Rule || []);
- data.EncryptionConfiguration = { Rules: Rules };
- callback(err, data);
- });
- }
- function deleteBucketEncryption(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteBucketReplication',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'encryption'
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function headObject(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:HeadObject',
- method: 'HEAD',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- VersionId: params.VersionId,
- headers: params.Headers
- }, function (err, data) {
- if (err) {
- var statusCode = err.statusCode;
- if (params.Headers['If-Modified-Since'] && statusCode && statusCode === 304) {
- return callback(null, {
- NotModified: true,
- statusCode: statusCode
- });
- }
- return callback(err);
- }
- data.ETag = util.attr(data.headers, 'etag', '');
- callback(null, data);
- });
- }
- function listObjectVersions(params, callback) {
- var reqParams = {};
- reqParams['prefix'] = params['Prefix'] || '';
- reqParams['delimiter'] = params['Delimiter'];
- reqParams['key-marker'] = params['KeyMarker'];
- reqParams['version-id-marker'] = params['VersionIdMarker'];
- reqParams['max-keys'] = params['MaxKeys'];
- reqParams['encoding-type'] = params['EncodingType'];
- submitRequest.call(this, {
- Action: 'name/cos:GetBucketObjectVersions',
- ResourceKey: reqParams['prefix'],
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- qs: reqParams,
- action: 'versions'
- }, function (err, data) {
- if (err) return callback(err);
- var ListVersionsResult = data.ListVersionsResult || {};
- var DeleteMarkers = ListVersionsResult.DeleteMarker || [];
- DeleteMarkers = util.isArray(DeleteMarkers) ? DeleteMarkers : [DeleteMarkers];
- var Versions = ListVersionsResult.Version || [];
- Versions = util.isArray(Versions) ? Versions : [Versions];
- var result = util.clone(ListVersionsResult);
- delete result.DeleteMarker;
- delete result.Version;
- util.extend(result, {
- DeleteMarkers: DeleteMarkers,
- Versions: Versions,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function getObject(params, callback) {
- var reqParams = params.Query || {};
- var reqParamsStr = params.QueryString || '';
- var onProgress = util.throttleOnProgress.call(this, 0, params.onProgress);
- reqParams['response-content-type'] = params['ResponseContentType'];
- reqParams['response-content-language'] = params['ResponseContentLanguage'];
- reqParams['response-expires'] = params['ResponseExpires'];
- reqParams['response-cache-control'] = params['ResponseCacheControl'];
- reqParams['response-content-disposition'] = params['ResponseContentDisposition'];
- reqParams['response-content-encoding'] = params['ResponseContentEncoding'];
-
- submitRequest.call(this, {
- Action: 'name/cos:GetObject',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- VersionId: params.VersionId,
- DataType: params.DataType,
- headers: params.Headers,
- qs: reqParams,
- qsStr: reqParamsStr,
- rawBody: true,
- onDownloadProgress: onProgress
- }, function (err, data) {
- onProgress(null, true);
- if (err) {
- var statusCode = err.statusCode;
- if (params.Headers['If-Modified-Since'] && statusCode && statusCode === 304) {
- return callback(null, {
- NotModified: true
- });
- }
- return callback(err);
- }
- callback(null, {
- Body: data.body,
- ETag: util.attr(data.headers, 'etag', ''),
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putObject(params, callback) {
- var self = this;
- var FileSize = params.ContentLength;
- var onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
-
- var headers = params.Headers;
- if (!headers['Cache-Control'] && !headers['cache-control']) headers['Cache-Control'] = '';
- if (!headers['Content-Type'] && !headers['content-type']) headers['Content-Type'] = params.Body && params.Body.type || '';
- var needCalcMd5 = params.UploadAddMetaMd5 || self.options.UploadAddMetaMd5 || self.options.UploadCheckContentMd5;
- util.getBodyMd5(needCalcMd5, params.Body, function (md5) {
- if (md5) {
- if (self.options.UploadCheckContentMd5) headers['Content-MD5'] = util.binaryBase64(md5);
- if (params.UploadAddMetaMd5 || self.options.UploadAddMetaMd5) headers['x-cos-meta-md5'] = md5;
- }
- if (params.ContentLength !== undefined) headers['Content-Length'] = params.ContentLength;
- onProgress(null, true);
- submitRequest.call(self, {
- Action: 'name/cos:PutObject',
- TaskId: params.TaskId,
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- qs: params.Query,
- body: params.Body,
- onProgress: onProgress
- }, function (err, data) {
- if (err) {
- onProgress(null, true);
- return callback(err);
- }
- onProgress({ loaded: FileSize, total: FileSize }, true);
- var url = getUrl({
- ForcePathStyle: self.options.ForcePathStyle,
- protocol: self.options.Protocol,
- domain: self.options.Domain,
- bucket: params.Bucket,
- region: !self.options.UseAccelerate ? params.Region : 'accelerate',
- object: params.Key
- });
- url = url.substr(url.indexOf('://') + 3);
- data.Location = url;
- data.ETag = util.attr(data.headers, 'etag', '');
- callback(null, data);
- });
- }, params.onHashProgress);
- }
- function deleteObject(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteObject',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- VersionId: params.VersionId,
- action: params.Recursive ? 'recursive' : ''
- }, function (err, data) {
- if (err) {
- var statusCode = err.statusCode;
- if (statusCode && statusCode === 404) {
- return callback(null, { BucketNotFound: true, statusCode: statusCode });
- } else {
- return callback(err);
- }
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getObjectAcl(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetObjectACL',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- action: 'acl'
- }, function (err, data) {
- if (err) return callback(err);
- var AccessControlPolicy = data.AccessControlPolicy || {};
- var Owner = AccessControlPolicy.Owner || {};
- var Grant = AccessControlPolicy.AccessControlList && AccessControlPolicy.AccessControlList.Grant || [];
- Grant = util.isArray(Grant) ? Grant : [Grant];
- var result = decodeAcl(AccessControlPolicy);
- delete result.GrantWrite;
- if (data.headers && data.headers['x-cos-acl']) {
- result.ACL = data.headers['x-cos-acl'];
- }
- result = util.extend(result, {
- Owner: Owner,
- Grants: Grant,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function putObjectAcl(params, callback) {
- var headers = params.Headers;
- var xml = '';
- if (params['AccessControlPolicy']) {
- var AccessControlPolicy = util.clone(params['AccessControlPolicy'] || {});
- var Grants = AccessControlPolicy.Grants || AccessControlPolicy.Grant;
- Grants = util.isArray(Grants) ? Grants : [Grants];
- delete AccessControlPolicy.Grant;
- delete AccessControlPolicy.Grants;
- AccessControlPolicy.AccessControlList = { Grant: Grants };
- xml = util.json2xml({ AccessControlPolicy: AccessControlPolicy });
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- }
-
- util.each(headers, function (val, key) {
- if (key.indexOf('x-cos-grant-') === 0) {
- headers[key] = uniqGrant(headers[key]);
- }
- });
- submitRequest.call(this, {
- Action: 'name/cos:PutObjectACL',
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- action: 'acl',
- headers: headers,
- body: xml
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function optionsObject(params, callback) {
- var headers = params.Headers;
- headers['Origin'] = params['Origin'];
- headers['Access-Control-Request-Method'] = params['AccessControlRequestMethod'];
- headers['Access-Control-Request-Headers'] = params['AccessControlRequestHeaders'];
- submitRequest.call(this, {
- Action: 'name/cos:OptionsObject',
- method: 'OPTIONS',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: headers
- }, function (err, data) {
- if (err) {
- if (err.statusCode && err.statusCode === 403) {
- return callback(null, {
- OptionsForbidden: true,
- statusCode: err.statusCode
- });
- }
- return callback(err);
- }
- var headers = data.headers || {};
- callback(null, {
- AccessControlAllowOrigin: headers['access-control-allow-origin'],
- AccessControlAllowMethods: headers['access-control-allow-methods'],
- AccessControlAllowHeaders: headers['access-control-allow-headers'],
- AccessControlExposeHeaders: headers['access-control-expose-headers'],
- AccessControlMaxAge: headers['access-control-max-age'],
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function putObjectCopy(params, callback) {
-
- var self = this;
- var headers = params.Headers;
- if (!headers['Cache-Control'] && !headers['cache-control']) headers['Cache-Control'] = '';
- var CopySource = params.CopySource || '';
- var m = util.getSourceParams.call(this, CopySource);
- if (!m) {
- callback(util.error(new Error('CopySource format error')));
- return;
- }
- var SourceBucket = m[1];
- var SourceRegion = m[3];
- var SourceKey = decodeURIComponent(m[4]);
- submitRequest.call(this, {
- Scope: [{
- action: 'name/cos:GetObject',
- bucket: SourceBucket,
- region: SourceRegion,
- prefix: SourceKey
- }, {
- action: 'name/cos:PutObject',
- bucket: params.Bucket,
- region: params.Region,
- prefix: params.Key
- }],
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- VersionId: params.VersionId,
- headers: params.Headers
- }, function (err, data) {
- if (err) return callback(err);
- var result = util.clone(data.CopyObjectResult || {});
- var url = getUrl({
- ForcePathStyle: self.options.ForcePathStyle,
- protocol: self.options.Protocol,
- domain: self.options.Domain,
- bucket: params.Bucket,
- region: params.Region,
- object: params.Key,
- isLocation: true
- });
- util.extend(result, {
- Location: url,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function uploadPartCopy(params, callback) {
- var CopySource = params.CopySource || '';
- var m = util.getSourceParams.call(this, CopySource);
- if (!m) {
- callback(util.error(new Error('CopySource format error')));
- return;
- }
- var SourceBucket = m[1];
- var SourceRegion = m[3];
- var SourceKey = decodeURIComponent(m[4]);
- submitRequest.call(this, {
- Scope: [{
- action: 'name/cos:GetObject',
- bucket: SourceBucket,
- region: SourceRegion,
- prefix: SourceKey
- }, {
- action: 'name/cos:PutObject',
- bucket: params.Bucket,
- region: params.Region,
- prefix: params.Key
- }],
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- VersionId: params.VersionId,
- qs: {
- partNumber: params['PartNumber'],
- uploadId: params['UploadId']
- },
- headers: params.Headers
- }, function (err, data) {
- if (err) return callback(err);
- var result = util.clone(data.CopyPartResult || {});
- util.extend(result, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function deleteMultipleObject(params, callback) {
- var Objects = params.Objects || [];
- var Quiet = params.Quiet;
- Objects = util.isArray(Objects) ? Objects : [Objects];
- var xml = util.json2xml({ Delete: { Object: Objects, Quiet: Quiet || false } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- var Scope = util.map(Objects, function (v) {
- return {
- action: 'name/cos:DeleteObject',
- bucket: params.Bucket,
- region: params.Region,
- prefix: v.Key
- };
- });
- submitRequest.call(this, {
- Scope: Scope,
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- body: xml,
- action: 'delete',
- headers: headers
- }, function (err, data) {
- if (err) return callback(err);
- var DeleteResult = data.DeleteResult || {};
- var Deleted = DeleteResult.Deleted || [];
- var Errors = DeleteResult.Error || [];
- Deleted = util.isArray(Deleted) ? Deleted : [Deleted];
- Errors = util.isArray(Errors) ? Errors : [Errors];
- var result = util.clone(DeleteResult);
- util.extend(result, {
- Error: Errors,
- Deleted: Deleted,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function restoreObject(params, callback) {
- var headers = params.Headers;
- if (!params['RestoreRequest']) {
- callback(util.error(new Error('missing param RestoreRequest')));
- return;
- }
- var RestoreRequest = params.RestoreRequest || {};
- var xml = util.json2xml({ RestoreRequest: RestoreRequest });
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:RestoreObject',
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- VersionId: params.VersionId,
- body: xml,
- action: 'restore',
- headers: headers
- }, callback);
- }
- function putObjectTagging(params, callback) {
- var Tagging = params['Tagging'] || {};
- var Tags = Tagging.TagSet || Tagging.Tags || params['Tags'] || [];
- Tags = util.clone(util.isArray(Tags) ? Tags : [Tags]);
- var xml = util.json2xml({ Tagging: { TagSet: { Tag: Tags } } });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:PutObjectTagging',
- method: 'PUT',
- Bucket: params.Bucket,
- Key: params.Key,
- Region: params.Region,
- body: xml,
- action: 'tagging',
- headers: headers,
- VersionId: params.VersionId
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function getObjectTagging(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:GetObjectTagging',
- method: 'GET',
- Key: params.Key,
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- action: 'tagging',
- VersionId: params.VersionId
- }, function (err, data) {
- if (err) {
- if (err.statusCode === 404 && err.error && (err.error === "Not Found" || err.error.Code === 'NoSuchTagSet')) {
- var result = {
- Tags: [],
- statusCode: err.statusCode
- };
- err.headers && (result.headers = err.headers);
- callback(null, result);
- } else {
- callback(err);
- }
- return;
- }
- var Tags = [];
- try {
- Tags = data.Tagging.TagSet.Tag || [];
- } catch (e) {}
- Tags = util.clone(util.isArray(Tags) ? Tags : [Tags]);
- callback(null, {
- Tags: Tags,
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function deleteObjectTagging(params, callback) {
- submitRequest.call(this, {
- Action: 'name/cos:DeleteObjectTagging',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- action: 'tagging',
- VersionId: params.VersionId
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function selectObjectContent(params, callback) {
- var SelectType = params['SelectType'];
- if (!SelectType) return callback(util.error(new Error('missing param SelectType')));
- var SelectRequest = params['SelectRequest'] || {};
- var xml = util.json2xml({ SelectRequest: SelectRequest });
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:GetObject',
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- action: 'select',
- qs: {
- 'select-type': params['SelectType']
- },
- VersionId: params.VersionId,
- body: xml,
- DataType: 'arraybuffer',
- rawBody: true
- }, function (err, data) {
- if (err && err.statusCode === 204) {
- return callback(null, { statusCode: err.statusCode });
- } else if (err) {
- return callback(err);
- }
- var result = util.parseSelectPayload(data.body);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers,
- Body: result.body,
- Payload: result.payload
- });
- });
- }
- function multipartInit(params, callback) {
- var self = this;
-
- var headers = params.Headers;
-
- if (!headers['Cache-Control'] && !headers['cache-control']) headers['Cache-Control'] = '';
- if (!headers['Content-Type'] && !headers['content-type']) headers['Content-Type'] = params.Body && params.Body.type || '';
- util.getBodyMd5(params.Body && (params.UploadAddMetaMd5 || self.options.UploadAddMetaMd5), params.Body, function (md5) {
- if (md5) params.Headers['x-cos-meta-md5'] = md5;
- submitRequest.call(self, {
- Action: 'name/cos:InitiateMultipartUpload',
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- action: 'uploads',
- headers: params.Headers,
- qs: params.Query
- }, function (err, data) {
- if (err) return callback(err);
- data = util.clone(data || {});
- if (data && data.InitiateMultipartUploadResult) {
- return callback(null, util.extend(data.InitiateMultipartUploadResult, {
- statusCode: data.statusCode,
- headers: data.headers
- }));
- }
- callback(null, data);
- });
- }, params.onHashProgress);
- }
- function multipartUpload(params, callback) {
- var self = this;
- util.getFileSize('multipartUpload', params, function () {
- util.getBodyMd5(self.options.UploadCheckContentMd5, params.Body, function (md5) {
- if (md5) params.Headers['Content-MD5'] = util.binaryBase64(md5);
- submitRequest.call(self, {
- Action: 'name/cos:UploadPart',
- TaskId: params.TaskId,
- method: 'PUT',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- qs: {
- partNumber: params['PartNumber'],
- uploadId: params['UploadId']
- },
- headers: params.Headers,
- onProgress: params.onProgress,
- body: params.Body || null
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- ETag: util.attr(data.headers, 'etag', ''),
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- });
- });
- }
- function multipartComplete(params, callback) {
- var self = this;
- var UploadId = params.UploadId;
- var Parts = params['Parts'];
- for (var i = 0, len = Parts.length; i < len; i++) {
- if (Parts[i]['ETag'] && Parts[i]['ETag'].indexOf('"') === 0) {
- continue;
- }
- Parts[i]['ETag'] = '"' + Parts[i]['ETag'] + '"';
- }
- var xml = util.json2xml({ CompleteMultipartUpload: { Part: Parts } });
-
- xml = xml.replace(/\n\s*/g, '');
- var headers = params.Headers;
- headers['Content-Type'] = 'application/xml';
- headers['Content-MD5'] = util.binaryBase64(util.md5(xml));
- submitRequest.call(this, {
- Action: 'name/cos:CompleteMultipartUpload',
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- qs: {
- uploadId: UploadId
- },
- body: xml,
- headers: headers
- }, function (err, data) {
- if (err) return callback(err);
- var url = getUrl({
- ForcePathStyle: self.options.ForcePathStyle,
- protocol: self.options.Protocol,
- domain: self.options.Domain,
- bucket: params.Bucket,
- region: params.Region,
- object: params.Key,
- isLocation: true
- });
- var res = data.CompleteMultipartUploadResult || {};
- if (res.ProcessResults) {
- if (res && res.ProcessResults) {
- res.UploadResult = {
- OriginalInfo: {
- Key: res.Key,
- Location: url,
- ETag: res.ETag,
- ImageInfo: res.ImageInfo
- },
- ProcessResults: res.ProcessResults
- };
- delete res.ImageInfo;
- delete res.ProcessResults;
- }
- }
- var result = util.extend(res, {
- Location: url,
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function multipartList(params, callback) {
- var reqParams = {};
- reqParams['delimiter'] = params['Delimiter'];
- reqParams['encoding-type'] = params['EncodingType'];
- reqParams['prefix'] = params['Prefix'] || '';
- reqParams['max-uploads'] = params['MaxUploads'];
- reqParams['key-marker'] = params['KeyMarker'];
- reqParams['upload-id-marker'] = params['UploadIdMarker'];
- reqParams = util.clearKey(reqParams);
- submitRequest.call(this, {
- Action: 'name/cos:ListMultipartUploads',
- ResourceKey: reqParams['prefix'],
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- headers: params.Headers,
- qs: reqParams,
- action: 'uploads'
- }, function (err, data) {
- if (err) return callback(err);
- if (data && data.ListMultipartUploadsResult) {
- var Upload = data.ListMultipartUploadsResult.Upload || [];
- Upload = util.isArray(Upload) ? Upload : [Upload];
- data.ListMultipartUploadsResult.Upload = Upload;
- }
- var result = util.clone(data.ListMultipartUploadsResult || {});
- util.extend(result, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function multipartListPart(params, callback) {
- var reqParams = {};
- reqParams['uploadId'] = params['UploadId'];
- reqParams['encoding-type'] = params['EncodingType'];
- reqParams['max-parts'] = params['MaxParts'];
- reqParams['part-number-marker'] = params['PartNumberMarker'];
- submitRequest.call(this, {
- Action: 'name/cos:ListParts',
- method: 'GET',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- qs: reqParams
- }, function (err, data) {
- if (err) return callback(err);
- var ListPartsResult = data.ListPartsResult || {};
- var Part = ListPartsResult.Part || [];
- Part = util.isArray(Part) ? Part : [Part];
- ListPartsResult.Part = Part;
- var result = util.clone(ListPartsResult);
- util.extend(result, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- callback(null, result);
- });
- }
- function multipartAbort(params, callback) {
- var reqParams = {};
- reqParams['uploadId'] = params['UploadId'];
- submitRequest.call(this, {
- Action: 'name/cos:AbortMultipartUpload',
- method: 'DELETE',
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- headers: params.Headers,
- qs: reqParams
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, {
- statusCode: data.statusCode,
- headers: data.headers
- });
- });
- }
- function request(params, callback) {
- submitRequest.call(this, {
- method: params.Method,
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- action: params.Action,
- headers: params.Headers,
- qs: params.Query,
- body: params.Body,
- Url: params.Url,
- rawBody: params.RawBody
- }, function (err, data) {
- if (err) return callback(err);
- if (data && data.body) {
- data.Body = data.body;
- delete data.body;
- }
- callback(err, data);
- });
- }
- function appendObject(params, callback) {
-
- var headers = params.Headers;
- if (!headers['Cache-Control'] && !headers['cache-control']) headers['Cache-Control'] = '';
- if (!headers['Content-Type'] && !headers['content-type']) headers['Content-Type'] = params.Body && params.Body.type || '';
- submitRequest.call(this, {
- Action: 'name/cos:AppendObject',
- method: 'POST',
- Bucket: params.Bucket,
- Region: params.Region,
- action: 'append',
- Key: params.Key,
- body: params.Body,
- qs: {
- position: params.Position
- },
- headers: params.Headers
- }, function (err, data) {
- if (err) return callback(err);
- callback(null, data);
- });
- }
- function getAuth(params) {
- var self = this;
- return util.getAuth({
- SecretId: params.SecretId || this.options.SecretId || '',
- SecretKey: params.SecretKey || this.options.SecretKey || '',
- Method: params.Method,
- Key: params.Key,
- Query: params.Query,
- Headers: params.Headers,
- Expires: params.Expires,
- UseRawKey: self.options.UseRawKey,
- SystemClockOffset: self.options.SystemClockOffset
- });
- }
- function getObjectUrl(params, callback) {
- var self = this;
- var url = getUrl({
- ForcePathStyle: self.options.ForcePathStyle,
- protocol: params.Protocol || self.options.Protocol,
- domain: params.Domain || self.options.Domain,
- bucket: params.Bucket,
- region: params.Region,
- object: params.Key
- });
- var queryParamsStr = '';
- if (params.Query) {
- queryParamsStr += util.obj2str(params.Query);
- }
- if (params.QueryString) {
- queryParamsStr += (queryParamsStr ? '&' : '') + params.QueryString;
- }
- var syncUrl = url;
- if (params.Sign !== undefined && !params.Sign) {
- queryParamsStr && (syncUrl += '?' + queryParamsStr);
- callback(null, { Url: syncUrl });
- return syncUrl;
- }
- var AuthData = getAuthorizationAsync.call(this, {
- Action: (params.Method || '').toUpperCase() === 'PUT' ? 'name/cos:PutObject' : 'name/cos:GetObject',
- Bucket: params.Bucket || '',
- Region: params.Region || '',
- Method: params.Method || 'get',
- Key: params.Key,
- Expires: params.Expires,
- Headers: params.Headers,
- Query: params.Query
- }, function (err, AuthData) {
- if (!callback) return;
- if (err) {
- callback(err);
- return;
- }
- var signUrl = url;
- signUrl += '?' + (AuthData.Authorization.indexOf('q-signature') > -1 ? AuthData.Authorization : 'sign=' + encodeURIComponent(AuthData.Authorization));
- AuthData.SecurityToken && (signUrl += '&x-cos-security-token=' + AuthData.SecurityToken);
- AuthData.ClientIP && (signUrl += '&clientIP=' + AuthData.ClientIP);
- AuthData.ClientUA && (signUrl += '&clientUA=' + AuthData.ClientUA);
- AuthData.Token && (signUrl += '&token=' + AuthData.Token);
- queryParamsStr && (signUrl += '&' + queryParamsStr);
- setTimeout(function () {
- callback(null, { Url: signUrl });
- });
- });
- if (AuthData) {
- syncUrl += '?' + AuthData.Authorization + (AuthData.SecurityToken ? '&x-cos-security-token=' + AuthData.SecurityToken : '');
- queryParamsStr && (syncUrl += '&' + queryParamsStr);
- } else {
- queryParamsStr && (syncUrl += '?' + queryParamsStr);
- }
- return syncUrl;
- }
- function decodeAcl(AccessControlPolicy) {
- var result = {
- GrantFullControl: [],
- GrantWrite: [],
- GrantRead: [],
- GrantReadAcp: [],
- GrantWriteAcp: [],
- ACL: ''
- };
- var GrantMap = {
- 'FULL_CONTROL': 'GrantFullControl',
- 'WRITE': 'GrantWrite',
- 'READ': 'GrantRead',
- 'READ_ACP': 'GrantReadAcp',
- 'WRITE_ACP': 'GrantWriteAcp'
- };
- var AccessControlList = AccessControlPolicy && AccessControlPolicy.AccessControlList || {};
- var Grant = AccessControlList.Grant;
- if (Grant) {
- Grant = util.isArray(Grant) ? Grant : [Grant];
- }
- var PublicAcl = { READ: 0, WRITE: 0, FULL_CONTROL: 0 };
- Grant && Grant.length && util.each(Grant, function (item) {
- if (item.Grantee.ID === 'qcs::cam::anyone:anyone' || item.Grantee.URI === 'http://cam.qcloud.com/groups/global/AllUsers') {
- PublicAcl[item.Permission] = 1;
- } else if (item.Grantee.ID !== AccessControlPolicy.Owner.ID) {
- result[GrantMap[item.Permission]].push('id="' + item.Grantee.ID + '"');
- }
- });
- if (PublicAcl.FULL_CONTROL || PublicAcl.WRITE && PublicAcl.READ) {
- result.ACL = 'public-read-write';
- } else if (PublicAcl.READ) {
- result.ACL = 'public-read';
- } else {
- result.ACL = 'private';
- }
- util.each(GrantMap, function (item) {
- result[item] = uniqGrant(result[item].join(','));
- });
- return result;
- }
- function uniqGrant(str) {
- var arr = str.split(',');
- var exist = {};
- var i, item;
- for (i = 0; i < arr.length;) {
- item = arr[i].trim();
- if (exist[item]) {
- arr.splice(i, 1);
- } else {
- exist[item] = true;
- arr[i] = item;
- i++;
- }
- }
- return arr.join(',');
- }
- function getUrl(params) {
- var region = params.region || '';
- var longBucket = params.bucket || '';
- var shortBucket = longBucket.substr(0, longBucket.lastIndexOf('-'));
- var appId = longBucket.substr(longBucket.lastIndexOf('-') + 1);
- var domain = params.domain;
- var object = params.object;
- if (typeof domain === 'function') {
- domain = domain({ Bucket: longBucket, Region: region });
- }
- var protocol = params.protocol || (util.isBrowser && location.protocol === 'http:' ? 'http:' : 'https:');
- if (!domain) {
- if (['cn-south', 'cn-south-2', 'cn-north', 'cn-east', 'cn-southwest', 'sg'].indexOf(region) > -1) {
- domain = '{Region}.myqcloud.com';
- } else {
- domain = 'cos.{Region}.myqcloud.com';
- }
- if (!params.ForcePathStyle) {
- domain = '{Bucket}.' + domain;
- }
- }
- domain = domain.replace(/\{\{AppId\}\}/ig, appId).replace(/\{\{Bucket\}\}/ig, shortBucket).replace(/\{\{Region\}\}/ig, region).replace(/\{\{.*?\}\}/ig, '');
- domain = domain.replace(/\{AppId\}/ig, appId).replace(/\{BucketName\}/ig, shortBucket).replace(/\{Bucket\}/ig, longBucket).replace(/\{Region\}/ig, region).replace(/\{.*?\}/ig, '');
- if (!/^[a-zA-Z]+:\/\//.test(domain)) {
- domain = protocol + '//' + domain;
- }
-
- if (domain.slice(-1) === '/') {
- domain = domain.slice(0, -1);
- }
- var url = domain;
- if (params.ForcePathStyle) {
- url += '/' + longBucket;
- }
- url += '/';
- if (object) {
- url += util.camSafeUrlEncode(object).replace(/%2F/g, '/');
- }
- if (params.isLocation) {
- url = url.replace(/^https?:\/\//, '');
- }
- return url;
- }
- function getAuthorizationAsync(params, callback) {
- var headers = util.clone(params.Headers);
- util.each(headers, function (v, k) {
- (v === '' || ['content-type', 'cache-control', 'expires'].indexOf(k.toLowerCase()) > -1) && delete headers[k];
- });
-
- var cbDone = false;
- var cb = function (err, AuthData) {
- if (cbDone) return;
- cbDone = true;
- if (AuthData && AuthData.XCosSecurityToken && !AuthData.SecurityToken) {
- AuthData = util.clone(AuthData);
- AuthData.SecurityToken = AuthData.XCosSecurityToken;
- delete AuthData.XCosSecurityToken;
- }
- callback && callback(err, AuthData);
- };
- var self = this;
- var Bucket = params.Bucket || '';
- var Region = params.Region || '';
-
- var KeyName = params.Key || '';
- if (self.options.ForcePathStyle && Bucket) {
- KeyName = Bucket + '/' + KeyName;
- }
- var Pathname = '/' + KeyName;
-
- var StsData = {};
- var Scope = params.Scope;
- if (!Scope) {
- var Action = params.Action || '';
- var ResourceKey = params.ResourceKey || params.Key || '';
- Scope = params.Scope || [{
- action: Action,
- bucket: Bucket,
- region: Region,
- prefix: ResourceKey
- }];
- }
- var ScopeKey = util.md5(JSON.stringify(Scope));
-
- self._StsCache = self._StsCache || [];
- (function () {
- var i, AuthData;
- for (i = self._StsCache.length - 1; i >= 0; i--) {
- AuthData = self._StsCache[i];
- var compareTime = Math.round(util.getSkewTime(self.options.SystemClockOffset) / 1000) + 30;
- if (AuthData.StartTime && compareTime < AuthData.StartTime || compareTime >= AuthData.ExpiredTime) {
- self._StsCache.splice(i, 1);
- continue;
- }
- if (!AuthData.ScopeLimit || AuthData.ScopeLimit && AuthData.ScopeKey === ScopeKey) {
- StsData = AuthData;
- break;
- }
- }
- })();
- var calcAuthByTmpKey = function () {
- var KeyTime = StsData.StartTime && StsData.ExpiredTime ? StsData.StartTime + ';' + StsData.ExpiredTime : '';
- var Authorization = util.getAuth({
- SecretId: StsData.TmpSecretId,
- SecretKey: StsData.TmpSecretKey,
- Method: params.Method,
- Pathname: Pathname,
- Query: params.Query,
- Headers: headers,
- Expires: params.Expires,
- UseRawKey: self.options.UseRawKey,
- SystemClockOffset: self.options.SystemClockOffset,
- KeyTime: KeyTime
- });
- var AuthData = {
- Authorization: Authorization,
- SecurityToken: StsData.SecurityToken || StsData.XCosSecurityToken || '',
- Token: StsData.Token || '',
- ClientIP: StsData.ClientIP || '',
- ClientUA: StsData.ClientUA || ''
- };
- cb(null, AuthData);
- };
- var checkAuthError = function (AuthData) {
- if (AuthData.Authorization) {
-
- var formatAllow = false;
- var auth = AuthData.Authorization;
- if (auth) {
- if (auth.indexOf(' ') > -1) {
- formatAllow = false;
- } else if (auth.indexOf('q-sign-algorithm=') > -1 && auth.indexOf('q-ak=') > -1 && auth.indexOf('q-sign-time=') > -1 && auth.indexOf('q-key-time=') > -1 && auth.indexOf('q-url-param-list=') > -1) {
- formatAllow = true;
- } else {
- try {
- auth = atob(auth);
- if (auth.indexOf('a=') > -1 && auth.indexOf('k=') > -1 && auth.indexOf('t=') > -1 && auth.indexOf('r=') > -1 && auth.indexOf('b=') > -1) {
- formatAllow = true;
- }
- } catch (e) {}
- }
- }
- if (!formatAllow) return util.error(new Error('getAuthorization callback params format error'));
- } else {
- if (!AuthData.TmpSecretId) return util.error(new Error('getAuthorization callback params missing "TmpSecretId"'));
- if (!AuthData.TmpSecretKey) return util.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));
- if (!AuthData.SecurityToken && !AuthData.XCosSecurityToken) return util.error(new Error('getAuthorization callback params missing "SecurityToken"'));
- if (!AuthData.ExpiredTime) return util.error(new Error('getAuthorization callback params missing "ExpiredTime"'));
- if (AuthData.ExpiredTime && AuthData.ExpiredTime.toString().length !== 10) return util.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));
- if (AuthData.StartTime && AuthData.StartTime.toString().length !== 10) return util.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'));
- }
- return false;
- };
-
- if (StsData.ExpiredTime && StsData.ExpiredTime - util.getSkewTime(self.options.SystemClockOffset) / 1000 > 60) {
-
- calcAuthByTmpKey();
- } else if (self.options.getAuthorization) {
-
- self.options.getAuthorization.call(self, {
- Bucket: Bucket,
- Region: Region,
- Method: params.Method,
- Key: KeyName,
- Pathname: Pathname,
- Query: params.Query,
- Headers: headers,
- Scope: Scope,
- SystemClockOffset: self.options.SystemClockOffset
- }, function (AuthData) {
- if (typeof AuthData === 'string') AuthData = { Authorization: AuthData };
- var AuthError = checkAuthError(AuthData);
- if (AuthError) return cb(AuthError);
- if (AuthData.Authorization) {
- cb(null, AuthData);
- } else {
- StsData = AuthData || {};
- StsData.Scope = Scope;
- StsData.ScopeKey = ScopeKey;
- self._StsCache.push(StsData);
- calcAuthByTmpKey();
- }
- });
- } else if (self.options.getSTS) {
-
- self.options.getSTS.call(self, {
- Bucket: Bucket,
- Region: Region
- }, function (data) {
- StsData = data || {};
- StsData.Scope = Scope;
- StsData.ScopeKey = ScopeKey;
- if (!StsData.TmpSecretId) StsData.TmpSecretId = StsData.SecretId;
- if (!StsData.TmpSecretKey) StsData.TmpSecretKey = StsData.SecretKey;
- var AuthError = checkAuthError(StsData);
- if (AuthError) return cb(AuthError);
- self._StsCache.push(StsData);
- calcAuthByTmpKey();
- });
- } else {
-
- return function () {
- var Authorization = util.getAuth({
- SecretId: params.SecretId || self.options.SecretId,
- SecretKey: params.SecretKey || self.options.SecretKey,
- Method: params.Method,
- Pathname: Pathname,
- Query: params.Query,
- Headers: headers,
- Expires: params.Expires,
- UseRawKey: self.options.UseRawKey,
- SystemClockOffset: self.options.SystemClockOffset
- });
- var AuthData = {
- Authorization: Authorization,
- SecurityToken: self.options.SecurityToken || self.options.XCosSecurityToken
- };
- cb(null, AuthData);
- return AuthData;
- }();
- }
- return '';
- }
- function allowRetry(err) {
- var allowRetry = false;
- var isTimeError = false;
- var serverDate = err.headers && (err.headers.date || err.headers.Date) || err.error && err.error.ServerTime;
- try {
- var errorCode = err.error.Code;
- var errorMessage = err.error.Message;
- if (errorCode === 'RequestTimeTooSkewed' || errorCode === 'AccessDenied' && errorMessage === 'Request has expired') {
- isTimeError = true;
- }
- } catch (e) {}
- if (err) {
- if (isTimeError && serverDate) {
- var serverTime = Date.parse(serverDate);
- if (this.options.CorrectClockSkew && Math.abs(util.getSkewTime(this.options.SystemClockOffset) - serverTime) >= 30000) {
- console.error('error: Local time is too skewed.');
- this.options.SystemClockOffset = serverTime - Date.now();
- allowRetry = true;
- }
- } else if (Math.floor(err.statusCode / 100) === 5) {
- allowRetry = true;
- }
- }
- return allowRetry;
- }
- function submitRequest(params, callback) {
- var self = this;
-
- !params.headers && (params.headers = {});
-
- !params.qs && (params.qs = {});
- params.VersionId && (params.qs.versionId = params.VersionId);
- params.qs = util.clearKey(params.qs);
-
- params.headers && (params.headers = util.clearKey(params.headers));
- params.qs && (params.qs = util.clearKey(params.qs));
- var Query = util.clone(params.qs);
- params.action && (Query[params.action] = '');
- var next = function (tryTimes) {
- var oldClockOffset = self.options.SystemClockOffset;
- getAuthorizationAsync.call(self, {
- Bucket: params.Bucket || '',
- Region: params.Region || '',
- Method: params.method,
- Key: params.Key,
- Query: Query,
- Headers: params.headers,
- Action: params.Action,
- ResourceKey: params.ResourceKey,
- Scope: params.Scope
- }, function (err, AuthData) {
- if (err) {
- callback(err);
- return;
- }
- params.AuthData = AuthData;
- _submitRequest.call(self, params, function (err, data) {
- if (err && tryTimes < 2 && (oldClockOffset !== self.options.SystemClockOffset || allowRetry.call(self, err))) {
- if (params.headers) {
- delete params.headers.Authorization;
- delete params.headers['token'];
- delete params.headers['clientIP'];
- delete params.headers['clientUA'];
- params.headers['x-cos-security-token'] && delete params.headers['x-cos-security-token'];
- params.headers['x-ci-security-token'] && delete params.headers['x-ci-security-token'];
- }
- next(tryTimes + 1);
- } else {
- callback(err, data);
- }
- });
- });
- };
- next(1);
- }
- function _submitRequest(params, callback) {
- var self = this;
- var TaskId = params.TaskId;
- if (TaskId && !self._isRunningTask(TaskId)) return;
- var bucket = params.Bucket;
- var region = params.Region;
- var object = params.Key;
- var method = params.method || 'GET';
- var url = params.Url || params.url;
- var body = params.body;
- var rawBody = params.rawBody;
-
- if (self.options.UseAccelerate) {
- region = 'accelerate';
- }
- url = url || getUrl({
- ForcePathStyle: self.options.ForcePathStyle,
- protocol: self.options.Protocol,
- domain: self.options.Domain,
- bucket: bucket,
- region: region,
- object: object
- });
- if (params.action) {
- url = url + '?' + params.action;
- }
- if (params.qsStr) {
- if (url.indexOf('?') > -1) {
- url = url + '&' + params.qsStr;
- } else {
- url = url + '?' + params.qsStr;
- }
- }
- var opt = {
- method: method,
- url: url,
- headers: params.headers,
- qs: params.qs,
- body: body
- };
-
- var token = 'x-cos-security-token';
- if (util.isCIHost(url)) {
- token = 'x-ci-security-token';
- }
-
- opt.headers.Authorization = params.AuthData.Authorization;
- params.AuthData.Token && (opt.headers['token'] = params.AuthData.Token);
- params.AuthData.ClientIP && (opt.headers['clientIP'] = params.AuthData.ClientIP);
- params.AuthData.ClientUA && (opt.headers['clientUA'] = params.AuthData.ClientUA);
- params.AuthData.SecurityToken && (opt.headers[token] = params.AuthData.SecurityToken);
-
- opt.headers && (opt.headers = util.clearKey(opt.headers));
- opt = util.clearKey(opt);
-
- if (params.onProgress && typeof params.onProgress === 'function') {
- var contentLength = body && (body.size || body.length) || 0;
- opt.onProgress = function (e) {
- if (TaskId && !self._isRunningTask(TaskId)) return;
- var loaded = e ? e.loaded : 0;
- params.onProgress({ loaded: loaded, total: contentLength });
- };
- }
- if (params.onDownloadProgress) {
- opt.onDownloadProgress = params.onDownloadProgress;
- }
- if (params.DataType) {
- opt.dataType = params.DataType;
- }
- if (this.options.Timeout) {
- opt.timeout = this.options.Timeout;
- }
- self.options.ForcePathStyle && (opt.pathStyle = self.options.ForcePathStyle);
- self.emit('before-send', opt);
- var sender = (self.options.Request || REQUEST)(opt, function (r) {
- if (r.error === 'abort') return;
- var receive = {
- options: opt,
- error: err,
- statusCode: response && response.statusCode || 0,
- headers: response && response.headers || {},
- body: body
- };
- self.emit('after-receive', receive);
- err = receive.error;
- body = receive.body;
- response = {
- statusCode: receive.statusCode,
- headers: receive.headers
- };
-
- self.emit('after-receive', r);
- var response = { statusCode: r.statusCode, statusMessage: r.statusMessage, headers: r.headers };
- var err = r.error;
- var body = r.body;
-
- var hasReturned;
- var cb = function (err, data) {
- TaskId && self.off('inner-kill-task', killTask);
- if (hasReturned) return;
- hasReturned = true;
- var attrs = {};
- response && response.statusCode && (attrs.statusCode = response.statusCode);
- response && response.headers && (attrs.headers = response.headers);
- if (err) {
- err = util.extend(err || {}, attrs);
- callback(err, null);
- } else {
- data = util.extend(data || {}, attrs);
- callback(null, data);
- }
- sender = null;
- };
-
- if (err) return cb(util.error(err));
-
- var statusCode = response.statusCode;
- var statusSuccess = Math.floor(statusCode / 100) === 2;
-
- if (rawBody && statusSuccess) return cb(null, { body: body });
-
- var json;
- try {
- json = body && body.indexOf('<') > -1 && body.indexOf('>') > -1 && util.xml2json(body) || {};
- } catch (e) {
- json = {};
- }
-
- var xmlError = json && json.Error;
- if (statusSuccess) {
-
- cb(null, json);
- } else if (xmlError) {
-
- cb(util.error(new Error(xmlError.Message), { code: xmlError.Code, error: xmlError }));
- } else if (statusCode) {
-
- cb(util.error(new Error(response.statusMessage), { code: '' + statusCode }));
- } else if (statusCode) {
-
- cb(util.error(new Error('statusCode error')));
- }
- });
-
- var killTask = function (data) {
- if (data.TaskId === TaskId) {
- sender && sender.abort && sender.abort();
- self.off('inner-kill-task', killTask);
- }
- };
- TaskId && self.on('inner-kill-task', killTask);
- }
- var API_MAP = {
-
- getService: getService,
- putBucket: putBucket,
- headBucket: headBucket,
- getBucket: getBucket,
- deleteBucket: deleteBucket,
- putBucketAcl: putBucketAcl,
- getBucketAcl: getBucketAcl,
- putBucketCors: putBucketCors,
- getBucketCors: getBucketCors,
- deleteBucketCors: deleteBucketCors,
- getBucketLocation: getBucketLocation,
- getBucketPolicy: getBucketPolicy,
- putBucketPolicy: putBucketPolicy,
- deleteBucketPolicy: deleteBucketPolicy,
- putBucketTagging: putBucketTagging,
- getBucketTagging: getBucketTagging,
- deleteBucketTagging: deleteBucketTagging,
- putBucketLifecycle: putBucketLifecycle,
- getBucketLifecycle: getBucketLifecycle,
- deleteBucketLifecycle: deleteBucketLifecycle,
- putBucketVersioning: putBucketVersioning,
- getBucketVersioning: getBucketVersioning,
- putBucketReplication: putBucketReplication,
- getBucketReplication: getBucketReplication,
- deleteBucketReplication: deleteBucketReplication,
- putBucketWebsite: putBucketWebsite,
- getBucketWebsite: getBucketWebsite,
- deleteBucketWebsite: deleteBucketWebsite,
- putBucketReferer: putBucketReferer,
- getBucketReferer: getBucketReferer,
- putBucketDomain: putBucketDomain,
- getBucketDomain: getBucketDomain,
- deleteBucketDomain: deleteBucketDomain,
- putBucketOrigin: putBucketOrigin,
- getBucketOrigin: getBucketOrigin,
- deleteBucketOrigin: deleteBucketOrigin,
- putBucketLogging: putBucketLogging,
- getBucketLogging: getBucketLogging,
- putBucketInventory: putBucketInventory,
- getBucketInventory: getBucketInventory,
- listBucketInventory: listBucketInventory,
- deleteBucketInventory: deleteBucketInventory,
- putBucketAccelerate: putBucketAccelerate,
- getBucketAccelerate: getBucketAccelerate,
- putBucketEncryption: putBucketEncryption,
- getBucketEncryption: getBucketEncryption,
- deleteBucketEncryption: deleteBucketEncryption,
-
- getObject: getObject,
- headObject: headObject,
- listObjectVersions: listObjectVersions,
- putObject: putObject,
- deleteObject: deleteObject,
- getObjectAcl: getObjectAcl,
- putObjectAcl: putObjectAcl,
- optionsObject: optionsObject,
- putObjectCopy: putObjectCopy,
- deleteMultipleObject: deleteMultipleObject,
- restoreObject: restoreObject,
- putObjectTagging: putObjectTagging,
- getObjectTagging: getObjectTagging,
- deleteObjectTagging: deleteObjectTagging,
- selectObjectContent: selectObjectContent,
- appendObject: appendObject,
-
- uploadPartCopy: uploadPartCopy,
- multipartInit: multipartInit,
- multipartUpload: multipartUpload,
- multipartComplete: multipartComplete,
- multipartList: multipartList,
- multipartListPart: multipartListPart,
- multipartAbort: multipartAbort,
-
- request: request,
- getObjectUrl: getObjectUrl,
- getAuth: getAuth
- };
- function warnOldApi(apiName, fn, proto) {
- util.each(['Cors', 'Acl'], function (suffix) {
- if (apiName.slice(-suffix.length) === suffix) {
- var oldName = apiName.slice(0, -suffix.length) + suffix.toUpperCase();
- var apiFn = util.apiWrapper(apiName, fn);
- var warned = false;
- proto[oldName] = function () {
- !warned && console.warn('warning: cos.' + oldName + ' has been deprecated. Please Use cos.' + apiName + ' instead.');
- warned = true;
- apiFn.apply(this, arguments);
- };
- }
- });
- }
- module.exports.init = function (COS, task) {
- task.transferToTaskMethod(API_MAP, 'putObject');
- util.each(API_MAP, function (fn, apiName) {
- COS.prototype[apiName] = util.apiWrapper(apiName, fn);
- warnOldApi(apiName, fn, COS.prototype);
- });
- };
- }),
- (function(module, exports) {
- var stringifyPrimitive = function (v) {
- switch (typeof v) {
- case 'string':
- return v;
- case 'boolean':
- return v ? 'true' : 'false';
- case 'number':
- return isFinite(v) ? v : '';
- default:
- return '';
- }
- };
- var queryStringify = function (obj, sep, eq, name) {
- sep = sep || '&';
- eq = eq || '=';
- if (obj === null) {
- obj = undefined;
- }
- if (typeof obj === 'object') {
- return Object.keys(obj).map(function (k) {
- var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
- if (Array.isArray(obj[k])) {
- return obj[k].map(function (v) {
- return ks + encodeURIComponent(stringifyPrimitive(v));
- }).join(sep);
- } else {
- return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
- }
- }).filter(Boolean).join(sep);
- }
- if (!name) return '';
- return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));
- };
- var xhrRes = function (err, xhr, body) {
- var headers = {};
- xhr.getAllResponseHeaders().trim().split('\n').forEach(function (item) {
- if (item) {
- var index = item.indexOf(':');
- var key = item.substr(0, index).trim().toLowerCase();
- var val = item.substr(index + 1).trim();
- headers[key] = val;
- }
- });
- return {
- error: err,
- statusCode: xhr.status,
- statusMessage: xhr.statusText,
- headers: headers,
- body: body
- };
- };
- var xhrBody = function (xhr, dataType) {
- return !dataType && dataType === 'text' ? xhr.responseText : xhr.response;
- };
- var request = function (opt, callback) {
-
- var method = (opt.method || 'GET').toUpperCase();
-
- var url = opt.url;
- if (opt.qs) {
- var qsStr = queryStringify(opt.qs);
- if (qsStr) {
- url += (url.indexOf('?') === -1 ? '?' : '&') + qsStr;
- }
- }
-
- var xhr = new XMLHttpRequest();
- xhr.open(method, url, true);
- xhr.responseType = opt.dataType || 'text';
-
- if (opt.xhrFields) {
- for (var xhrField in opt.xhrFields) {
- xhr[xhrField] = opt.xhrFields[xhrField];
- }
- }
-
- var headers = opt.headers;
- if (headers) {
- for (var key in headers) {
- if (headers.hasOwnProperty(key) && key.toLowerCase() !== 'content-length' && key.toLowerCase() !== 'user-agent' && key.toLowerCase() !== 'origin' && key.toLowerCase() !== 'host') {
- xhr.setRequestHeader(key, headers[key]);
- }
- }
- }
-
- if (opt.onProgress && xhr.upload) xhr.upload.onprogress = opt.onProgress;
- if (opt.onDownloadProgress) xhr.onprogress = opt.onDownloadProgress;
-
- if (opt.timeout) xhr.timeout = opt.timeout;
- xhr.ontimeout = function (event) {
- var error = new Error('timeout');
- callback(xhrRes(error, xhr));
- };
-
- xhr.onload = function () {
- callback(xhrRes(null, xhr, xhrBody(xhr, opt.dataType)));
- };
-
- xhr.onerror = function (err) {
- var body = xhrBody(xhr, opt.dataType);
- if (body) {
-
- callback(xhrRes(null, xhr, body));
- } else {
-
- var error = xhr.statusText;
- if (!error && xhr.status === 0) error = new Error('CORS blocked or network error');
- callback(xhrRes(error, xhr, body));
- }
- };
-
- xhr.send(opt.body || '');
-
- return xhr;
- };
- module.exports = request;
- }),
- (function(module, exports, __webpack_require__) {
- var session = __webpack_require__(4);
- var Async = __webpack_require__(19);
- var EventProxy = __webpack_require__(3).EventProxy;
- var util = __webpack_require__(0);
- function sliceUploadFile(params, callback) {
- var self = this;
- var ep = new EventProxy();
- var TaskId = params.TaskId;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var Body = params.Body;
- var ChunkSize = params.ChunkSize || params.SliceSize || self.options.ChunkSize;
- var AsyncLimit = params.AsyncLimit;
- var StorageClass = params.StorageClass;
- var ServerSideEncryption = params.ServerSideEncryption;
- var FileSize;
- var onProgress;
- var onHashProgress = params.onHashProgress;
-
- ep.on('error', function (err) {
- if (!self._isRunningTask(TaskId)) return;
- err.UploadId = params.UploadData.UploadId || '';
- return callback(err);
- });
-
- ep.on('upload_complete', function (UploadCompleteData) {
- var _UploadCompleteData = util.extend({
- UploadId: params.UploadData.UploadId || ''
- }, UploadCompleteData);
- callback(null, _UploadCompleteData);
- });
-
- ep.on('upload_slice_complete', function (UploadData) {
- var metaHeaders = {};
- util.each(params.Headers, function (val, k) {
- var shortKey = k.toLowerCase();
- if (shortKey.indexOf('x-cos-meta-') === 0 || shortKey === 'pic-operations') metaHeaders[k] = val;
- });
- uploadSliceComplete.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- UploadId: UploadData.UploadId,
- SliceList: UploadData.SliceList,
- Headers: metaHeaders
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- session.removeUsing(UploadData.UploadId);
- if (err) {
- onProgress(null, true);
- return ep.emit('error', err);
- }
- session.removeUploadId.call(self, UploadData.UploadId);
- onProgress({ loaded: FileSize, total: FileSize }, true);
- ep.emit('upload_complete', data);
- });
- });
-
- ep.on('get_upload_data_finish', function (UploadData) {
-
- var uuid = session.getFileId(Body, params.ChunkSize, Bucket, Key);
- uuid && session.saveUploadId.call(self, uuid, UploadData.UploadId, self.options.UploadIdCacheLimit);
- session.setUsing(UploadData.UploadId);
-
- onProgress(null, true);
- uploadSliceList.call(self, {
- TaskId: TaskId,
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- Body: Body,
- FileSize: FileSize,
- SliceSize: ChunkSize,
- AsyncLimit: AsyncLimit,
- ServerSideEncryption: ServerSideEncryption,
- UploadData: UploadData,
- Headers: params.Headers,
- onProgress: onProgress
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) {
- onProgress(null, true);
- return ep.emit('error', err);
- }
- ep.emit('upload_slice_complete', data);
- });
- });
-
- ep.on('get_file_size_finish', function () {
- onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
- if (params.UploadData.UploadId) {
- ep.emit('get_upload_data_finish', params.UploadData);
- } else {
- var _params = util.extend({
- TaskId: TaskId,
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- Headers: params.Headers,
- StorageClass: StorageClass,
- Body: Body,
- FileSize: FileSize,
- SliceSize: ChunkSize,
- onHashProgress: onHashProgress
- }, params);
- getUploadIdAndPartList.call(self, _params, function (err, UploadData) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return ep.emit('error', err);
- params.UploadData.UploadId = UploadData.UploadId;
- params.UploadData.PartList = UploadData.PartList;
- ep.emit('get_upload_data_finish', params.UploadData);
- });
- }
- });
-
- FileSize = params.ContentLength;
- delete params.ContentLength;
- !params.Headers && (params.Headers = {});
- util.each(params.Headers, function (item, key) {
- if (key.toLowerCase() === 'content-length') {
- delete params.Headers[key];
- }
- });
-
- (function () {
- var SIZE = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 1024 * 2, 1024 * 4, 1024 * 5];
- var AutoChunkSize = 1024 * 1024;
- for (var i = 0; i < SIZE.length; i++) {
- AutoChunkSize = SIZE[i] * 1024 * 1024;
- if (FileSize / AutoChunkSize <= self.options.MaxPartNumber) break;
- }
- params.ChunkSize = params.SliceSize = ChunkSize = Math.max(ChunkSize, AutoChunkSize);
- })();
-
- if (FileSize === 0) {
- params.Body = '';
- params.ContentLength = 0;
- params.SkipTask = true;
- self.putObject(params, callback);
- } else {
- ep.emit('get_file_size_finish');
- }
- }
- function getUploadIdAndPartList(params, callback) {
- var TaskId = params.TaskId;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var StorageClass = params.StorageClass;
- var self = this;
-
- var ETagMap = {};
- var FileSize = params.FileSize;
- var SliceSize = params.SliceSize;
- var SliceCount = Math.ceil(FileSize / SliceSize);
- var FinishSliceCount = 0;
- var FinishSize = 0;
- var onHashProgress = util.throttleOnProgress.call(self, FileSize, params.onHashProgress);
- var getChunkETag = function (PartNumber, callback) {
- var start = SliceSize * (PartNumber - 1);
- var end = Math.min(start + SliceSize, FileSize);
- var ChunkSize = end - start;
- if (ETagMap[PartNumber]) {
- callback(null, {
- PartNumber: PartNumber,
- ETag: ETagMap[PartNumber],
- Size: ChunkSize
- });
- } else {
- util.fileSlice(params.Body, start, end, false, function (chunkItem) {
- util.getFileMd5(chunkItem, function (err, md5) {
- if (err) return callback(util.error(err));
- var ETag = '"' + md5 + '"';
- ETagMap[PartNumber] = ETag;
- FinishSliceCount += 1;
- FinishSize += ChunkSize;
- onHashProgress({ loaded: FinishSize, total: FileSize });
- callback(null, {
- PartNumber: PartNumber,
- ETag: ETag,
- Size: ChunkSize
- });
- });
- });
- }
- };
-
- var isAvailableUploadList = function (PartList, callback) {
- var PartCount = PartList.length;
-
- if (PartCount === 0) {
- return callback(null, true);
- }
-
- if (PartCount > SliceCount) {
- return callback(null, false);
- }
-
- if (PartCount > 1) {
- var PartSliceSize = Math.max(PartList[0].Size, PartList[1].Size);
- if (PartSliceSize !== SliceSize) {
- return callback(null, false);
- }
- }
-
- var next = function (index) {
- if (index < PartCount) {
- var Part = PartList[index];
- getChunkETag(Part.PartNumber, function (err, chunk) {
- if (chunk && chunk.ETag === Part.ETag && chunk.Size === Part.Size) {
- next(index + 1);
- } else {
- callback(null, false);
- }
- });
- } else {
- callback(null, true);
- }
- };
- next(0);
- };
- var ep = new EventProxy();
- ep.on('error', function (errData) {
- if (!self._isRunningTask(TaskId)) return;
- return callback(errData);
- });
-
- ep.on('upload_id_available', function (UploadData) {
-
- var map = {};
- var list = [];
- util.each(UploadData.PartList, function (item) {
- map[item.PartNumber] = item;
- });
- for (var PartNumber = 1; PartNumber <= SliceCount; PartNumber++) {
- var item = map[PartNumber];
- if (item) {
- item.PartNumber = PartNumber;
- item.Uploaded = true;
- } else {
- item = {
- PartNumber: PartNumber,
- ETag: null,
- Uploaded: false
- };
- }
- list.push(item);
- }
- UploadData.PartList = list;
- callback(null, UploadData);
- });
-
- ep.on('no_available_upload_id', function () {
- if (!self._isRunningTask(TaskId)) return;
- var _params = util.extend({
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- Query: util.clone(params.Query),
- StorageClass: StorageClass,
- Body: params.Body
- }, params);
- var headers = util.clone(params.Headers);
- delete headers['x-cos-mime-limit'];
- _params.Headers = headers;
- self.multipartInit(_params, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return ep.emit('error', err);
- var UploadId = data.UploadId;
- if (!UploadId) {
- return callback(util.error(new Error('no such upload id')));
- }
- ep.emit('upload_id_available', { UploadId: UploadId, PartList: [] });
- });
- });
-
- ep.on('has_and_check_upload_id', function (UploadIdList) {
-
- UploadIdList = UploadIdList.reverse();
- Async.eachLimit(UploadIdList, 1, function (UploadId, asyncCallback) {
- if (!self._isRunningTask(TaskId)) return;
-
- if (session.using[UploadId]) {
- asyncCallback();
- return;
- }
-
- wholeMultipartListPart.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- UploadId: UploadId
- }, function (err, PartListData) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) {
- session.removeUsing(UploadId);
- return ep.emit('error', err);
- }
- var PartList = PartListData.PartList;
- PartList.forEach(function (item) {
- item.PartNumber *= 1;
- item.Size *= 1;
- item.ETag = item.ETag || '';
- });
- isAvailableUploadList(PartList, function (err, isAvailable) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return ep.emit('error', err);
- if (isAvailable) {
- asyncCallback({
- UploadId: UploadId,
- PartList: PartList
- });
- } else {
- asyncCallback();
- }
- });
- });
- }, function (AvailableUploadData) {
- if (!self._isRunningTask(TaskId)) return;
- onHashProgress(null, true);
- if (AvailableUploadData && AvailableUploadData.UploadId) {
- ep.emit('upload_id_available', AvailableUploadData);
- } else {
- ep.emit('no_available_upload_id');
- }
- });
- });
-
- ep.on('seek_local_avail_upload_id', function (RemoteUploadIdList) {
-
- var uuid = session.getFileId(params.Body, params.ChunkSize, Bucket, Key);
- var LocalUploadIdList = session.getUploadIdList.call(self, uuid);
- if (!uuid || !LocalUploadIdList) {
- ep.emit('has_and_check_upload_id', RemoteUploadIdList);
- return;
- }
- var next = function (index) {
-
- if (index >= LocalUploadIdList.length) {
- ep.emit('has_and_check_upload_id', RemoteUploadIdList);
- return;
- }
- var UploadId = LocalUploadIdList[index];
-
- if (!util.isInArray(RemoteUploadIdList, UploadId)) {
- session.removeUploadId.call(self, UploadId);
- next(index + 1);
- return;
- }
-
- if (session.using[UploadId]) {
- next(index + 1);
- return;
- }
-
- wholeMultipartListPart.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- UploadId: UploadId
- }, function (err, PartListData) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) {
-
- session.removeUploadId.call(self, UploadId);
- next(index + 1);
- } else {
-
- ep.emit('upload_id_available', {
- UploadId: UploadId,
- PartList: PartListData.PartList
- });
- }
- });
- };
- next(0);
- });
-
- ep.on('get_remote_upload_id_list', function () {
-
- wholeMultipartList.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return ep.emit('error', err);
-
- var RemoteUploadIdList = util.filter(data.UploadList, function (item) {
- return item.Key === Key && (!StorageClass || item.StorageClass.toUpperCase() === StorageClass.toUpperCase());
- }).reverse().map(function (item) {
- return item.UploadId || item.UploadID;
- });
- if (RemoteUploadIdList.length) {
- ep.emit('seek_local_avail_upload_id', RemoteUploadIdList);
- } else {
-
- var uuid = session.getFileId(params.Body, params.ChunkSize, Bucket, Key),
- LocalUploadIdList;
- if (uuid && (LocalUploadIdList = session.getUploadIdList.call(self, uuid))) {
- util.each(LocalUploadIdList, function (UploadId) {
- session.removeUploadId.call(self, UploadId);
- });
- }
- ep.emit('no_available_upload_id');
- }
- });
- });
-
- ep.emit('get_remote_upload_id_list');
- }
- function wholeMultipartList(params, callback) {
- var self = this;
- var UploadList = [];
- var sendParams = {
- Bucket: params.Bucket,
- Region: params.Region,
- Prefix: params.Key
- };
- var next = function () {
- self.multipartList(sendParams, function (err, data) {
- if (err) return callback(err);
- UploadList.push.apply(UploadList, data.Upload || []);
- if (data.IsTruncated === 'true') {
-
- sendParams.KeyMarker = data.NextKeyMarker;
- sendParams.UploadIdMarker = data.NextUploadIdMarker;
- next();
- } else {
- callback(null, { UploadList: UploadList });
- }
- });
- };
- next();
- }
- function wholeMultipartListPart(params, callback) {
- var self = this;
- var PartList = [];
- var sendParams = {
- Bucket: params.Bucket,
- Region: params.Region,
- Key: params.Key,
- UploadId: params.UploadId
- };
- var next = function () {
- self.multipartListPart(sendParams, function (err, data) {
- if (err) return callback(err);
- PartList.push.apply(PartList, data.Part || []);
- if (data.IsTruncated === 'true') {
-
- sendParams.PartNumberMarker = data.NextPartNumberMarker;
- next();
- } else {
- callback(null, { PartList: PartList });
- }
- });
- };
- next();
- }
- function uploadSliceList(params, cb) {
- var self = this;
- var TaskId = params.TaskId;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var UploadData = params.UploadData;
- var FileSize = params.FileSize;
- var SliceSize = params.SliceSize;
- var ChunkParallel = Math.min(params.AsyncLimit || self.options.ChunkParallelLimit || 1, 256);
- var Body = params.Body;
- var SliceCount = Math.ceil(FileSize / SliceSize);
- var FinishSize = 0;
- var ServerSideEncryption = params.ServerSideEncryption;
- var Headers = params.Headers;
- var needUploadSlices = util.filter(UploadData.PartList, function (SliceItem) {
- if (SliceItem['Uploaded']) {
- FinishSize += SliceItem['PartNumber'] >= SliceCount ? FileSize % SliceSize || SliceSize : SliceSize;
- }
- return !SliceItem['Uploaded'];
- });
- var onProgress = params.onProgress;
- Async.eachLimit(needUploadSlices, ChunkParallel, function (SliceItem, asyncCallback) {
- if (!self._isRunningTask(TaskId)) return;
- var PartNumber = SliceItem['PartNumber'];
- var currentSize = Math.min(FileSize, SliceItem['PartNumber'] * SliceSize) - (SliceItem['PartNumber'] - 1) * SliceSize;
- var preAddSize = 0;
- uploadSliceItem.call(self, {
- TaskId: TaskId,
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- SliceSize: SliceSize,
- FileSize: FileSize,
- PartNumber: PartNumber,
- ServerSideEncryption: ServerSideEncryption,
- Body: Body,
- UploadData: UploadData,
- Headers: Headers,
- onProgress: function (data) {
- FinishSize += data.loaded - preAddSize;
- preAddSize = data.loaded;
- onProgress({ loaded: FinishSize, total: FileSize });
- }
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- if (!err && !data.ETag) err = 'get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )';
- if (err) {
- FinishSize -= preAddSize;
- } else {
- FinishSize += currentSize - preAddSize;
- SliceItem.ETag = data.ETag;
- }
- onProgress({ loaded: FinishSize, total: FileSize });
- asyncCallback(err || null, data);
- });
- }, function (err) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return cb(err);
- cb(null, {
- UploadId: UploadData.UploadId,
- SliceList: UploadData.PartList
- });
- });
- }
- function uploadSliceItem(params, callback) {
- var self = this;
- var TaskId = params.TaskId;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var FileSize = params.FileSize;
- var FileBody = params.Body;
- var PartNumber = params.PartNumber * 1;
- var SliceSize = params.SliceSize;
- var ServerSideEncryption = params.ServerSideEncryption;
- var UploadData = params.UploadData;
- var Headers = params.Headers || {};
- var ChunkRetryTimes = self.options.ChunkRetryTimes + 1;
- var start = SliceSize * (PartNumber - 1);
- var ContentLength = SliceSize;
- var end = start + SliceSize;
- if (end > FileSize) {
- end = FileSize;
- ContentLength = end - start;
- }
- var headersWhiteList = ['x-cos-traffic-limit', 'x-cos-mime-limit'];
- var headers = {};
- util.each(Headers, function (v, k) {
- if (headersWhiteList.indexOf(k) > -1) {
- headers[k] = v;
- }
- });
- var PartItem = UploadData.PartList[PartNumber - 1];
- Async.retry(ChunkRetryTimes, function (tryCallback) {
- if (!self._isRunningTask(TaskId)) return;
- util.fileSlice(FileBody, start, end, true, function (Body) {
- self.multipartUpload({
- TaskId: TaskId,
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- ContentLength: ContentLength,
- PartNumber: PartNumber,
- UploadId: UploadData.UploadId,
- ServerSideEncryption: ServerSideEncryption,
- Body: Body,
- Headers: headers,
- onProgress: params.onProgress
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- if (err) return tryCallback(err);
- PartItem.Uploaded = true;
- return tryCallback(null, data);
- });
- });
- }, function (err, data) {
- if (!self._isRunningTask(TaskId)) return;
- return callback(err, data);
- });
- }
- function uploadSliceComplete(params, callback) {
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var UploadId = params.UploadId;
- var SliceList = params.SliceList;
- var self = this;
- var ChunkRetryTimes = this.options.ChunkRetryTimes + 1;
- var Headers = params.Headers;
- var Parts = SliceList.map(function (item) {
- return {
- PartNumber: item.PartNumber,
- ETag: item.ETag
- };
- });
-
- Async.retry(ChunkRetryTimes, function (tryCallback) {
- self.multipartComplete({
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- UploadId: UploadId,
- Parts: Parts,
- Headers: Headers
- }, tryCallback);
- }, function (err, data) {
- callback(err, data);
- });
- }
- function abortUploadTask(params, callback) {
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var UploadId = params.UploadId;
- var Level = params.Level || 'task';
- var AsyncLimit = params.AsyncLimit;
- var self = this;
- var ep = new EventProxy();
- ep.on('error', function (errData) {
- return callback(errData);
- });
-
- ep.on('get_abort_array', function (AbortArray) {
- abortUploadTaskArray.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- Headers: params.Headers,
- AsyncLimit: AsyncLimit,
- AbortArray: AbortArray
- }, callback);
- });
- if (Level === 'bucket') {
-
- wholeMultipartList.call(self, {
- Bucket: Bucket,
- Region: Region
- }, function (err, data) {
- if (err) return callback(err);
- ep.emit('get_abort_array', data.UploadList || []);
- });
- } else if (Level === 'file') {
-
- if (!Key) return callback(util.error(new Error('abort_upload_task_no_key')));
- wholeMultipartList.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key
- }, function (err, data) {
- if (err) return callback(err);
- ep.emit('get_abort_array', data.UploadList || []);
- });
- } else if (Level === 'task') {
-
- if (!UploadId) return callback(util.error(new Error('abort_upload_task_no_id')));
- if (!Key) return callback(util.error(new Error('abort_upload_task_no_key')));
- ep.emit('get_abort_array', [{
- Key: Key,
- UploadId: UploadId
- }]);
- } else {
- return callback(util.error(new Error('abort_unknown_level')));
- }
- }
- function abortUploadTaskArray(params, callback) {
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var AbortArray = params.AbortArray;
- var AsyncLimit = params.AsyncLimit || 1;
- var self = this;
- var index = 0;
- var resultList = new Array(AbortArray.length);
- Async.eachLimit(AbortArray, AsyncLimit, function (AbortItem, nextItem) {
- var eachIndex = index;
- if (Key && Key !== AbortItem.Key) {
- resultList[eachIndex] = { error: { KeyNotMatch: true } };
- nextItem(null);
- return;
- }
- var UploadId = AbortItem.UploadId || AbortItem.UploadID;
- self.multipartAbort({
- Bucket: Bucket,
- Region: Region,
- Key: AbortItem.Key,
- Headers: params.Headers,
- UploadId: UploadId
- }, function (err) {
- var task = {
- Bucket: Bucket,
- Region: Region,
- Key: AbortItem.Key,
- UploadId: UploadId
- };
- resultList[eachIndex] = { error: err, task: task };
- nextItem(null);
- });
- index++;
- }, function (err) {
- if (err) return callback(err);
- var successList = [];
- var errorList = [];
- for (var i = 0, len = resultList.length; i < len; i++) {
- var item = resultList[i];
- if (item['task']) {
- if (item['error']) {
- errorList.push(item['task']);
- } else {
- successList.push(item['task']);
- }
- }
- }
- return callback(null, {
- successList: successList,
- errorList: errorList
- });
- });
- }
- function uploadFile(params, callback) {
- var self = this;
-
- var SliceSize = params.SliceSize === undefined ? self.options.SliceSize : params.SliceSize;
- var taskList = [];
- var Body = params.Body;
- var FileSize = Body.size || Body.length || 0;
- var fileInfo = { TaskId: '' };
-
- util.each(params, function (v, k) {
- if (typeof v !== 'object' && typeof v !== 'function') {
- fileInfo[k] = v;
- }
- });
-
- var _onTaskReady = params.onTaskReady;
- var onTaskReady = function (tid) {
- fileInfo.TaskId = tid;
- _onTaskReady && _onTaskReady(tid);
- };
- params.onTaskReady = onTaskReady;
-
- var _onFileFinish = params.onFileFinish;
- var onFileFinish = function (err, data) {
- _onFileFinish && _onFileFinish(err, data, fileInfo);
- callback && callback(err, data);
- };
-
- var api = FileSize > SliceSize ? 'sliceUploadFile' : 'putObject';
- taskList.push({
- api: api,
- params: params,
- callback: onFileFinish
- });
- self._addTasks(taskList);
- }
- function uploadFiles(params, callback) {
- var self = this;
-
- var SliceSize = params.SliceSize === undefined ? self.options.SliceSize : params.SliceSize;
-
- var TotalSize = 0;
- var TotalFinish = 0;
- var onTotalProgress = util.throttleOnProgress.call(self, TotalFinish, params.onProgress);
-
- var unFinishCount = params.files.length;
- var _onTotalFileFinish = params.onFileFinish;
- var resultList = Array(unFinishCount);
- var onTotalFileFinish = function (err, data, options) {
- onTotalProgress(null, true);
- _onTotalFileFinish && _onTotalFileFinish(err, data, options);
- resultList[options.Index] = {
- options: options,
- error: err,
- data: data
- };
- if (--unFinishCount <= 0 && callback) {
- callback(null, { files: resultList });
- }
- };
-
- var taskList = [];
- util.each(params.files, function (fileParams, index) {
- (function () {
-
- var Body = fileParams.Body;
- var FileSize = Body.size || Body.length || 0;
- var fileInfo = { Index: index, TaskId: '' };
-
- TotalSize += FileSize;
-
- util.each(fileParams, function (v, k) {
- if (typeof v !== 'object' && typeof v !== 'function') {
- fileInfo[k] = v;
- }
- });
-
- var _onTaskReady = fileParams.onTaskReady;
- var onTaskReady = function (tid) {
- fileInfo.TaskId = tid;
- _onTaskReady && _onTaskReady(tid);
- };
- fileParams.onTaskReady = onTaskReady;
-
- var PreAddSize = 0;
- var _onProgress = fileParams.onProgress;
- var onProgress = function (info) {
- TotalFinish = TotalFinish - PreAddSize + info.loaded;
- PreAddSize = info.loaded;
- _onProgress && _onProgress(info);
- onTotalProgress({ loaded: TotalFinish, total: TotalSize });
- };
- fileParams.onProgress = onProgress;
-
- var _onFileFinish = fileParams.onFileFinish;
- var onFileFinish = function (err, data) {
- _onFileFinish && _onFileFinish(err, data);
- onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
- };
-
- var api = FileSize > SliceSize ? 'sliceUploadFile' : 'putObject';
- taskList.push({
- api: api,
- params: fileParams,
- callback: onFileFinish
- });
- })();
- });
- self._addTasks(taskList);
- }
- function sliceCopyFile(params, callback) {
- var ep = new EventProxy();
- var self = this;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var CopySource = params.CopySource;
- var m = util.getSourceParams.call(this, CopySource);
- if (!m) {
- callback(util.error(new Error('CopySource format error')));
- return;
- }
- var SourceBucket = m.Bucket;
- var SourceRegion = m.Region;
- var SourceKey = decodeURIComponent(m.Key);
- var CopySliceSize = params.CopySliceSize === undefined ? self.options.CopySliceSize : params.CopySliceSize;
- CopySliceSize = Math.max(0, CopySliceSize);
- var ChunkSize = params.CopyChunkSize || this.options.CopyChunkSize;
- var ChunkParallel = this.options.CopyChunkParallelLimit;
- var FinishSize = 0;
- var FileSize;
- var onProgress;
-
- ep.on('copy_slice_complete', function (UploadData) {
- var metaHeaders = {};
- util.each(params.Headers, function (val, k) {
- if (k.toLowerCase().indexOf('x-cos-meta-') === 0) metaHeaders[k] = val;
- });
- var Parts = util.map(UploadData.PartList, function (item) {
- return {
- PartNumber: item.PartNumber,
- ETag: item.ETag
- };
- });
- self.multipartComplete({
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- UploadId: UploadData.UploadId,
- Parts: Parts
- }, function (err, data) {
- if (err) {
- onProgress(null, true);
- return callback(err);
- }
- onProgress({ loaded: FileSize, total: FileSize }, true);
- callback(null, data);
- });
- });
- ep.on('get_copy_data_finish', function (UploadData) {
- Async.eachLimit(UploadData.PartList, ChunkParallel, function (SliceItem, asyncCallback) {
- var PartNumber = SliceItem.PartNumber;
- var CopySourceRange = SliceItem.CopySourceRange;
- var currentSize = SliceItem.end - SliceItem.start;
- copySliceItem.call(self, {
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- CopySource: CopySource,
- UploadId: UploadData.UploadId,
- PartNumber: PartNumber,
- CopySourceRange: CopySourceRange
- }, function (err, data) {
- if (err) return asyncCallback(err);
- FinishSize += currentSize;
- onProgress({ loaded: FinishSize, total: FileSize });
- SliceItem.ETag = data.ETag;
- asyncCallback(err || null, data);
- });
- }, function (err) {
- if (err) {
- onProgress(null, true);
- return callback(err);
- }
- ep.emit('copy_slice_complete', UploadData);
- });
- });
- ep.on('get_file_size_finish', function (SourceHeaders) {
-
- (function () {
- var SIZE = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 1024 * 2, 1024 * 4, 1024 * 5];
- var AutoChunkSize = 1024 * 1024;
- for (var i = 0; i < SIZE.length; i++) {
- AutoChunkSize = SIZE[i] * 1024 * 1024;
- if (FileSize / AutoChunkSize <= self.options.MaxPartNumber) break;
- }
- params.ChunkSize = ChunkSize = Math.max(ChunkSize, AutoChunkSize);
- var ChunkCount = Math.ceil(FileSize / ChunkSize);
- var list = [];
- for (var partNumber = 1; partNumber <= ChunkCount; partNumber++) {
- var start = (partNumber - 1) * ChunkSize;
- var end = partNumber * ChunkSize < FileSize ? partNumber * ChunkSize - 1 : FileSize - 1;
- var item = {
- PartNumber: partNumber,
- start: start,
- end: end,
- CopySourceRange: "bytes=" + start + "-" + end
- };
- list.push(item);
- }
- params.PartList = list;
- })();
- var TargetHeader;
- if (params.Headers['x-cos-metadata-directive'] === 'Replaced') {
- TargetHeader = params.Headers;
- } else {
- TargetHeader = SourceHeaders;
- }
- TargetHeader['x-cos-storage-class'] = params.Headers['x-cos-storage-class'] || SourceHeaders['x-cos-storage-class'];
- TargetHeader = util.clearKey(TargetHeader);
-
- if (SourceHeaders['x-cos-storage-class'] === 'ARCHIVE' || SourceHeaders['x-cos-storage-class'] === 'DEEP_ARCHIVE') {
- var restoreHeader = SourceHeaders['x-cos-restore'];
- if (!restoreHeader || restoreHeader === 'ongoing-request="true"') {
- callback(util.error(new Error('Unrestored archive object is not allowed to be copied')));
- return;
- }
- }
-
- delete TargetHeader['x-cos-copy-source'];
- delete TargetHeader['x-cos-metadata-directive'];
- delete TargetHeader['x-cos-copy-source-If-Modified-Since'];
- delete TargetHeader['x-cos-copy-source-If-Unmodified-Since'];
- delete TargetHeader['x-cos-copy-source-If-Match'];
- delete TargetHeader['x-cos-copy-source-If-None-Match'];
- self.multipartInit({
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- Headers: TargetHeader
- }, function (err, data) {
- if (err) return callback(err);
- params.UploadId = data.UploadId;
- ep.emit('get_copy_data_finish', params);
- });
- });
-
- self.headObject({
- Bucket: SourceBucket,
- Region: SourceRegion,
- Key: SourceKey
- }, function (err, data) {
- if (err) {
- if (err.statusCode && err.statusCode === 404) {
- callback(util.error(err, { ErrorStatus: SourceKey + ' Not Exist' }));
- } else {
- callback(err);
- }
- return;
- }
- FileSize = params.FileSize = data.headers['content-length'];
- if (FileSize === undefined || !FileSize) {
- callback(util.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')));
- return;
- }
- onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
-
- if (FileSize <= CopySliceSize) {
- if (!params.Headers['x-cos-metadata-directive']) {
- params.Headers['x-cos-metadata-directive'] = 'Copy';
- }
- self.putObjectCopy(params, function (err, data) {
- if (err) {
- onProgress(null, true);
- return callback(err);
- }
- onProgress({ loaded: FileSize, total: FileSize }, true);
- callback(err, data);
- });
- } else {
- var resHeaders = data.headers;
- var SourceHeaders = {
- 'Cache-Control': resHeaders['cache-control'],
- 'Content-Disposition': resHeaders['content-disposition'],
- 'Content-Encoding': resHeaders['content-encoding'],
- 'Content-Type': resHeaders['content-type'],
- 'Expires': resHeaders['expires'],
- 'x-cos-storage-class': resHeaders['x-cos-storage-class']
- };
- util.each(resHeaders, function (v, k) {
- var metaPrefix = 'x-cos-meta-';
- if (k.indexOf(metaPrefix) === 0 && k.length > metaPrefix.length) {
- SourceHeaders[k] = v;
- }
- });
- ep.emit('get_file_size_finish', SourceHeaders);
- }
- });
- }
- function copySliceItem(params, callback) {
- var TaskId = params.TaskId;
- var Bucket = params.Bucket;
- var Region = params.Region;
- var Key = params.Key;
- var CopySource = params.CopySource;
- var UploadId = params.UploadId;
- var PartNumber = params.PartNumber * 1;
- var CopySourceRange = params.CopySourceRange;
- var ChunkRetryTimes = this.options.ChunkRetryTimes + 1;
- var self = this;
- Async.retry(ChunkRetryTimes, function (tryCallback) {
- self.uploadPartCopy({
- TaskId: TaskId,
- Bucket: Bucket,
- Region: Region,
- Key: Key,
- CopySource: CopySource,
- UploadId: UploadId,
- PartNumber: PartNumber,
- CopySourceRange: CopySourceRange
- }, function (err, data) {
- tryCallback(err || null, data);
- });
- }, function (err, data) {
- return callback(err, data);
- });
- }
- var API_MAP = {
- sliceUploadFile: sliceUploadFile,
- abortUploadTask: abortUploadTask,
- uploadFile: uploadFile,
- uploadFiles: uploadFiles,
- sliceCopyFile: sliceCopyFile
- };
- module.exports.init = function (COS, task) {
- task.transferToTaskMethod(API_MAP, 'sliceUploadFile');
- util.each(API_MAP, function (fn, apiName) {
- COS.prototype[apiName] = util.apiWrapper(apiName, fn);
- });
- };
- }),
- (function(module, exports) {
- var eachLimit = function (arr, limit, iterator, callback) {
- callback = callback || function () {};
- if (!arr.length || limit <= 0) {
- return callback();
- }
- var completed = 0;
- var started = 0;
- var running = 0;
- (function replenish() {
- if (completed >= arr.length) {
- return callback();
- }
- while (running < limit && started < arr.length) {
- started += 1;
- running += 1;
- iterator(arr[started - 1], function (err) {
- if (err) {
- callback(err);
- callback = function () {};
- } else {
- completed += 1;
- running -= 1;
- if (completed >= arr.length) {
- callback();
- } else {
- replenish();
- }
- }
- });
- }
- })();
- };
- var retry = function (times, iterator, callback) {
- var next = function (index) {
- iterator(function (err, data) {
- if (err && index < times) {
- next(index + 1);
- } else {
- callback(err, data);
- }
- });
- };
- if (times < 1) {
- callback();
- } else {
- next(1);
- }
- };
- var async = {
- eachLimit: eachLimit,
- retry: retry
- };
- module.exports = async;
- })
- ]);
- });
|