案例:ajax利用FormData上傳文件蜕提,事件鉤子監(jiān)控進(jìn)度時(shí)間

<!DOCTYPE?html>

<html?lang="en">

<head>

????<meta?charset="UTF-8">

????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0">

????<meta?http-equiv="X-UA-Compatible"?content="ie=edge">

????<title>Document</title>

</head>

<body>

????<input?type="file"?class="myfile"?/>

????進(jìn)度:<progress?value="0"?max="100"></progress>?<span?class="percent">0%</span>

????速度:<span?class="speed">20b/s</span>

????<button>點(diǎn)擊上傳</button>

????<button>取消上傳</button>

</body>

<script>

????let?xhr?=?new?XMLHttpRequest();

????let?btns?=?document.querySelectorAll("button");

????let?stime;

????let?sloaded;

????btns[0].onclick?=?function?()?{

????????let?file?=?document.querySelector(".myfile").files[0];

????????let?form?=?new?FormData();

????????form.append("myfile",?file);

????????xhr.open("post",?"/fileUpload",?true);

????????xhr.onload?=?function?()?{

????????????console.log(xhr.responseText);

????????}

????????xhr.upload.onloadstart?=?function(){

????????????console.log("開始上傳");

????????????stime?=?new?Date().getTime();

????????????sloaded?=?0;

????????}

????????xhr.upload.onprogress?=?function(evt){

????????????let?endTime?=?new?Date().getTime();

????????????//?時(shí)間差井辜;

????????????let?dTime?=?(endTime?-?stime)/1000;

????????????//?當(dāng)前時(shí)間內(nèi)上傳的文件大小

????????????let?dloaded?=??evt.loaded?-?sloaded;

????????????let?speed?=?dloaded/dTime;

????????????let?unit?=?"b/s";

????????????stime?=?new?Date().getTime();

????????????sloaded?=?evt.loaded;

????????????if(speed/1024>1){

????????????????unit?=?"kb/s";

????????????????speed?=?speed/1024;

????????????}

????????????if(speed/1024>1){

????????????????unit?=?"mb/s";

????????????????speed?=?speed/1024;

????????????}

????????????document.querySelector(".speed").innerHTML?=?speed.toFixed(2)+unit;

????????????//?console.log(speed.toFixed(2));

????????????//?console.log("正在上傳");

????????????//?當(dāng)前文件上傳的大小evt.loaded

????????????//?需要上傳文件的大小

???????????let?percent?=??(evt.loaded/evt.total*100).toFixed(0);

????????//????console.log(percent);

????????????document.querySelector("progress").value?=?percent;

????????????document.querySelector(".percent").innerHTML?=?percent+"%";

????????}

????????xhr.upload.onload?=?function(){

????????????console.log("上傳成功");

????????}

????????xhr.upload.onloadend?=?function(){

????????????console.log("上傳完成");

????????}

????????xhr.upload.onabort?=?function(){

????????????console.log("取消上傳");

????????}

????????xhr.send(form);

????}

????btns[1].onclick?=?function(){

????????xhr.abort();

????}

</script>

</html>


const?Koa?=?require("koa");

const?static?=?require("koa-static");

const?Router?=?require("koa-router");

const?koaBody?=?require("koa-body");

const?fs?=?require("fs");

const?usersData?=?require("./data/users.json");

let?app?=?new?Koa();

app.use(static(__dirname+"/static"));

app.use(koaBody({

????multipart:true

}));

let?router?=?new?Router();

router.get("/",(ctx,next)=>{

????ctx.body?=?"hello";

})

router.get("/checkUserName",(ctx,next)=>{

????console.log(ctx.query.username);

????let?res?=??usersData.find(v=>v.username==ctx.query.username);

????if(res){

????????ctx.body?=?{

????????????status:1,

????????????info:"用戶名正確"

????????};

????}else{

????????ctx.body?=?{

????????????status:2,

????????????info:"用戶名錯(cuò)誤"

????????};

????}

})

router.get("/get/:id",(ctx,next)=>{

????console.log(ctx.params);

????ctx.body?=?{

????????status:1,

????????info:"請(qǐng)求成功"

????}

})

router.post("/post",(ctx,next)=>{

????console.log(ctx.request.body);

????ctx.body?=?{

????????status:1,

????????info:"post請(qǐng)求成功"

????}

})

router.get("/xml",(ctx,next)=>{

????//?ctx.set("content-type","text/xml");

????ctx.body?=?`<?xml?version='1.0'?encoding='utf-8'??>

????????????????????<books>

????????????????????????<nodejs>

????????????????????????????<name>nodejs實(shí)戰(zhàn)</name>

????????????????????????????<price>56元</price>

????????????????????????</nodejs>

????????????????????????<react>

????????????????????????????<name>react入門</name>

????????????????????????????<price>50元</price>

????????????????????????</react>

????????????????????</books>

????????????????`

})

router.post("/upload",(ctx,next)=>{

????console.log(ctx.request.body);

????console.log(ctx.request.files.img);

?????let?fileData?=??fs.readFileSync(ctx.request.files.img.path);

????fs.writeFileSync("static/imgs/"+ctx.request.files.img.name,fileData);

????ctx.body?=?"請(qǐng)求成功";

})

router.post("/fileUpload",(ctx,next)=>{

????console.log(ctx.request.files);

????let?fileData?=??fs.readFileSync(ctx.request.files.myfile.path);

????fs.writeFileSync("static/imgs/"+ctx.request.files.myfile.name,fileData);

????ctx.body?=?"請(qǐng)求成功";

})

app.use(router.routes());

app.listen(3000);


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哎媚,更是在濱河造成了極大的恐慌租漂,老刑警劉巖阶女,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哩治,居然都是意外死亡秃踩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門业筏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔杨,“玉大人,你說我怎么就攤上這事蒜胖∠穑” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵台谢,是天一觀的道長(zhǎng)寻狂。 經(jīng)常有香客問我,道長(zhǎng)对碌,這世上最難降的妖魔是什么荆虱? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮朽们,結(jié)果婚禮上怀读,老公的妹妹穿的比我還像新娘。我一直安慰自己骑脱,他們只是感情好菜枷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叁丧,像睡著了一般啤誊。 火紅的嫁衣襯著肌膚如雪岳瞭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天蚊锹,我揣著相機(jī)與錄音瞳筏,去河邊找鬼。 笑死牡昆,一個(gè)胖子當(dāng)著我的面吹牛姚炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丢烘,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼柱宦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了播瞳?” 一聲冷哼從身側(cè)響起掸刊,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赢乓,沒想到半個(gè)月后忧侧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牌芋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年苍柏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姜贡。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棺棵,靈堂內(nèi)的尸體忽然破棺而出楼咳,到底是詐尸還是另有隱情,我是刑警寧澤烛恤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布母怜,位于F島的核電站,受9級(jí)特大地震影響缚柏,放射性物質(zhì)發(fā)生泄漏苹熏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一币喧、第九天 我趴在偏房一處隱蔽的房頂上張望轨域。 院中可真熱鬧,春花似錦杀餐、人聲如沸干发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枉长。三九已至冀续,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間必峰,已是汗流浹背洪唐。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吼蚁,地道東北人凭需。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桂敛,于是被迫代替她去往敵國(guó)和親功炮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容