前端上傳實(shí)現(xiàn)


項(xiàng)目中涉及到的上傳
項(xiàng)目中涉及到需要上傳文件的需求很多,簡單的有上傳用戶頭像砾赔,復(fù)雜一些的有文件管理系統(tǒng)中的文件上傳蝌箍,可以做到斷點(diǎn)續(xù)傳,分片上傳暴心,大文件上傳妓盲,上傳文件夾等功能。
1专普、用戶頭像上傳或證書上傳(form+iframe)
首先來說說頭像上傳本橙,幾乎所有需要用戶登錄的網(wǎng)站都需要支持用戶上傳頭像。我做的項(xiàng)目需要兼容低級(jí)瀏覽器脆诉,所以通過form+iframe這種簡單的方式來實(shí)現(xiàn)甚亭。

<form name="uploadFigure" target="asyncUpload" action="/avatar/upload/" method="post" enctype="multipart/form-data">
    <input class="upload" name="avatar" type="file">
</form>
<iframe name="asyncUpload" src="proxy.html" style="display:none"></iframe>
接著,我需要獲取接口的返回值進(jìn)行下一步操作击胜。  
$('iframe').on('load', function() {
    var resText = $('iframe')[0].contentDocument.body.textContent;
    var res = JSON.parse(responseText) || {};
    if (res.code == 0) {
        //success
    } else {
        //error   
    }
}); 
或者  
$('iframe').on('load', function() {
    var frame = frames['asyncUpload'];
    var res = JSON.decode(frame.document.body.innerHTML);
    if(res) {
        if(res.code == 0) {
            //success
        }
        else 
            //error
        }
    }               
}); 

2亏狰、文件上傳(采用flash上傳)
項(xiàng)目最早使用的是SWFUpload上傳,SWFUpload是一個(gè)客戶端文件上傳工具偶摔,它通過整合Flash與JavaScript技術(shù)為WEB開發(fā)者提供了一個(gè)具有豐富功能繼而超越傳統(tǒng)<input type="file" />標(biāo)簽的文件上傳模式暇唾。
SWFUpload有以下特點(diǎn)
* 可以同時(shí)上傳多個(gè)文件;
* 類似AJAX的無刷新上傳;
* 可以顯示上傳進(jìn)度策州;
* 良好的瀏覽器兼容性瘸味;
* 兼容其他JavaScript庫 (例如:jQuery, Prototype等);
* 支持Flash 8和Flash 9够挂。
配制方法:
需要要引用swfUpload.js

<script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script>

然后初始化

new SWFUpload({
    upload_url: url,
    flash_url: 'EmacleUploader.swf',
    assume_success_timeout: '10000',
    file_size_limit: 300 * 1024,
    file_queue_limit: 50,
    file_types: "*.*",
    file_types_description: "All files",
    ...
})

3旁仿、文件上傳(采用客戶端上傳插件的方式)
但是泥彤,swfupload不能實(shí)現(xiàn)斷點(diǎn)續(xù)傳锯厢,分片上傳,文件夾上傳等昆咽,我們通過插件實(shí)現(xiàn)了以上swfupload不能實(shí)現(xiàn)的功能办悟。瀏覽器插件時(shí)c++同學(xué)寫的尘奏。我在這里只說一下前端如何獲取瀏覽器插件基本信息以及判斷插件是否加載成功。
因?yàn)閚avigator.plugins只在非ie中生效病蛉,但ActiveX在ie中并不好用炫加,因?yàn)槟阈枰烂總€(gè)插件的唯一標(biāo)識(shí)符,尤其是對(duì)于自己開發(fā)的插件铺然。所以此處生成obj檢查是否包含版本信息來確認(rèn)琢感。

    var testUploadPluginDom = jQuery('<object id="testPluginDom" type="application/x-plugin" width="0" height="0"></object>');
    jQuery("body").append(testPluginDom);
    var pluginVersion = document.getElementById('testPluginDom').version;
    if (pluginVersion) {
        //console.log("version: " + pluginVersion);
        result = true;
    } else {
        //console.log("client plugin is not load....");
        result = false;
    }

其中object標(biāo)簽的type屬性值為插件的mime類型
4、文件上傳(采用webuploader.js插件上傳)
然后就是使用很廣泛的FEX的webuploader.js了探熔,可以實(shí)現(xiàn)上傳進(jìn)度、斷點(diǎn)續(xù)傳烘挫、分片上傳诀艰,高級(jí)瀏覽器使用h5上傳,低版本依然采用flash上傳饮六。
用法我就不必多說其垄,請(qǐng)看官方文檔
5卤橄、移動(dòng)端webapp文件上傳(移動(dòng)端使用webuploader.js有什么問題)
移動(dòng)端用起來的問題還是挺多的绿满。
1、ios9.2(猜測(cè)10以下)上傳的圖片無法獲取文件名窟扑,被自動(dòng)命名為image喇颁;
2、ios上嚎货,如果支持多圖片上傳測(cè)不支持視頻上傳橘霎;
3.android上,不支持多文件上傳殖属。在圖片和視頻文件夾中不可上傳視頻姐叁。
另外,可見移動(dòng)端注意事項(xiàng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末外潜,一起剝皮案震驚了整個(gè)濱河市原环,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌处窥,老刑警劉巖嘱吗,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碧库,居然都是意外死亡柜与,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門嵌灰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄匕,“玉大人,你說我怎么就攤上這事沽瞭∏ń常” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵驹溃,是天一觀的道長城丧。 經(jīng)常有香客問我,道長豌鹤,這世上最難降的妖魔是什么亡哄? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮布疙,結(jié)果婚禮上蚊惯,老公的妹妹穿的比我還像新娘。我一直安慰自己灵临,他們只是感情好截型,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著儒溉,像睡著了一般宦焦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顿涣,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天波闹,我揣著相機(jī)與錄音,去河邊找鬼涛碑。 笑死舔痪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锌唾。 我是一名探鬼主播锄码,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼夺英,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了滋捶?” 一聲冷哼從身側(cè)響起痛悯,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎重窟,沒想到半個(gè)月后载萌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巡扇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年扭仁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厅翔。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乖坠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刀闷,到底是詐尸還是另有隱情熊泵,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布甸昏,位于F島的核電站顽分,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏施蜜。R本人自食惡果不足惜卒蘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翻默。 院中可真熱鬧缸沃,春花似錦、人聲如沸冰蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祠肥。三九已至,卻和暖如春梯皿,著一層夾襖步出監(jiān)牢的瞬間仇箱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工东羹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剂桥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓属提,卻偏偏與公主長得像权逗,于是被迫代替她去往敵國和親美尸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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