upload

多文件上傳并預(yù)覽

利用input 的type='file" 可以實(shí)現(xiàn)文件的上傳煤辨,不過只支持單個文件上傳。只有給input加上multiple屬性才能實(shí)現(xiàn)多個文件同時上傳木张。
好了众辨,下面我們來實(shí)現(xiàn)一個簡單的多圖片上傳并預(yù)覽的例子

<div class="input-file-box">
<span>點(diǎn)擊上傳圖片</span>
<input type="file" name="" id="uploadfile" multiple>
</div>
<div id="img-box"></div>
1
2
3
4
5
這是html結(jié)構(gòu),di=img-box的盒子是后面放預(yù)覽圖片的舷礼。
下面是js代碼:

window.onload=function(){
var input=document.getElementById("uploadfile");
var div;
// 當(dāng)用戶上傳時觸發(fā)事件
input.onchange=function(){
readFile(this);
}
//處理圖片并添加都dom中的函數(shù)
var readFile=function(obj){
// 獲取input里面的文件組
var fileList=obj.files;
//對文件組進(jìn)行遍歷鹃彻,可以到控制臺打印出fileList去看看
for(var i=0;i<fileList.length;i++){
var reader= new FileReader();
reader.readAsDataURL(fileList[i]);
// 當(dāng)文件讀取成功時執(zhí)行的函數(shù)
reader.onload=function(e){
div=document.createElement('div');
div.innerHTML='<img src="'+this.result+'" />';
document.getElementById("img-box").appendChild(div);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
接下來分析下實(shí)現(xiàn)步驟,具體來看下readFile()函數(shù)
首先我們先獲取用戶上傳的的文件

// 獲取input里面的文件組
var fileList=obj.files;
1
2
obj.files返回一個FileList對象妻献,該對象里面有很多屬性蛛株,比如我上傳兩個圖片,控制臺打印如下console.log(fileList);

可以看到有有兩個File育拨,下標(biāo)分別為0,1谨履,長度length為2。點(diǎn)擊其中一個File展開可以看到更多詳細(xì)的信息

lastModified和lastModifiedDate代表文件的上次修改時間至朗,返回的格式不一樣
name:文件名屉符,只讀
size:文件大小剧浸,單位是字節(jié)锹引,只讀
type:文件MIME類型矗钟,只讀
( 利用size屬性判斷可以控制上傳的文件大小,type可以控制上傳的類型嫌变,上面FileList的length可以控制上傳的數(shù)量 )

接下來我們對文件進(jìn)行遍歷吨艇,進(jìn)入for循環(huán),首先實(shí)例化一個FileReader接口

var reader= new FileReader();
1
FileReader接口提供讀取文件的方法和事件
主要的方法有:

FileReader.readAsBinaryString(blob/file) // 以二進(jìn)制格式讀取文件內(nèi)容
FileReader.readAsText(file, [encoding]) // 以文本(及字符串)格式讀取文件內(nèi)容腾啥,并且可以強(qiáng)制選擇文件編碼
FileReader.readAsDataURL(file) // 以DataURL格式讀取文件內(nèi)容
FileReader.abort() // 終止讀取操作
主要的事件有:

FileReader.onloadstart // 讀取操作開始時觸發(fā)
FileReader.onload // 讀取操作成功時觸發(fā)
FileReader.onloadend // 讀取操作完成時觸發(fā)(不論成功還是失敗)
FileReader.onprogress // 讀取操作過程中觸發(fā)
FileReader.onabort // 讀取操作被中斷時觸發(fā)
FileReader.onerror // 讀取操作失敗時觸發(fā)
然后以DataURl格式去讀取當(dāng)前圖片

reader.readAsDataURL(fileList[i]);
1
當(dāng)文件讀取成功時進(jìn)入.onload()事件

reader.onload=function(e){
div=document.createElement('div');
div.innerHTML='<img src="'+this.result+'" />';
document.getElementById("img-box").appendChild(div);
}
1
2
3
4
5
首先創(chuàng)建一個div和img东涡,然后把它渲染到我們預(yù)留的盒子里去,并加載到頁面中顯示圖片倘待。
這里的 this.result 獲取文件讀取的結(jié)果疮跑,也可以用e.target.result。把結(jié)果放在img的src中凸舵。(注意看清楚那些引號)
此時就可以看到上傳的圖片被渲染到頁面中了祖娘。

修改樣式

多文件上傳預(yù)覽算是完成了,不過原生文件上傳的樣式并不太好看啊奄,如何修改樣式呢渐苏,基本做法就是:在input外層套一個div,然后把input的寬高設(shè)為100%菇夸,并把透明度變?yōu)?琼富,然后直接對外層div修改樣式就可以了。

舉個栗子庄新,這個最終的樣式效果圖

還是上面那個html結(jié)構(gòu)

<div class="input-file-box">
<span>點(diǎn)擊上傳圖片</span>
<input type="file" name="" id="uploadfile" multiple>
</div>
<div id="img-box"></div>
1
2
3
4
5
css:

/外層div/
.input-file-box{
border: 1px solid gray;
width: 150px;
height: 150px;
position: relative;
text-align: center;
border-radius: 8px;
}
/文字描述/
.input-file-box > span{
display: block;
width: 100px;
height: 30px;
position: absolute;
top: 0px;
bottom: 0;
left: 0;
right: 0;
margin: auto;
color: gray;
}
/input框/
.input-file-box #uploadfile{
opacity: 0;
width: 100%;
height: 100%;
cursor: pointer;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
完成鞠眉,文中如有錯誤,望大神指點(diǎn)~
————————————————
版權(quán)聲明:本文為CSDN博主「呂大瓜」的原創(chuàng)文章择诈,遵循CC 4.0 by-sa版權(quán)協(xié)議凡蚜,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42490398/article/details/83904815

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吭从,一起剝皮案震驚了整個濱河市朝蜘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涩金,老刑警劉巖谱醇,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異步做,居然都是意外死亡副渴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門全度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煮剧,“玉大人,你說我怎么就攤上這事∶阒眩” “怎么了佑颇?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長草娜。 經(jīng)常有香客問我挑胸,道長,這世上最難降的妖魔是什么宰闰? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任茬贵,我火速辦了婚禮,結(jié)果婚禮上移袍,老公的妹妹穿的比我還像新娘解藻。我一直安慰自己,他們只是感情好葡盗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布舆逃。 她就那樣靜靜地躺著,像睡著了一般戳粒。 火紅的嫁衣襯著肌膚如雪路狮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天蔚约,我揣著相機(jī)與錄音奄妨,去河邊找鬼。 笑死苹祟,一個胖子當(dāng)著我的面吹牛砸抛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播树枫,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼直焙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砂轻?” 一聲冷哼從身側(cè)響起奔誓,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搔涝,沒想到半個月后厨喂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庄呈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年蜕煌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诬留。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斜纪,死狀恐怖贫母,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盒刚,我是刑警寧澤腺劣,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站伪冰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏樟蠕。R本人自食惡果不足惜贮聂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寨辩。 院中可真熱鬧吓懈,春花似錦、人聲如沸靡狞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甸怕。三九已至甘穿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梢杭,已是汗流浹背温兼。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留武契,地道東北人募判。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像咒唆,于是被迫代替她去往敵國和親届垫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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