Ajax文件異步上傳劫乱,Html5實(shí)現(xiàn)

1 簡(jiǎn)介

開(kāi)發(fā)文件上傳功能從來(lái)不是一件愉快的事,異步上傳更是如此掘猿,使用過(guò)iframe和Flash的上傳方案病游,也都感覺(jué)十分的別扭。本文簡(jiǎn)要簡(jiǎn)紹利用Html5的FormData實(shí)現(xiàn)文件的異步上傳稠通,還可以實(shí)現(xiàn)上傳進(jìn)度條和文件大小驗(yàn)證等衬衬。服務(wù)端使用springMVC的方案進(jìn)行處理。

2 Html代碼

<form id="myForm">
    <input type="file" id="u_photo" name="u_photo" />
    <input type="button" id="submit-btn" value="上傳" />
</form>

3 JQuery上傳

$("#submit-btn").on('click', function() {
    $.ajax({
        url:"/test/upload",
        type:"post",
        data:new FormData($("#myForm").get(0)),
        //十分重要改橘,不能省略
        cache: false,
        processData: false,
        contentType: false,
        success: function () {
            alert("上傳成功佣耐!");
        }
    });
});

4 JQuery文件大小驗(yàn)證

文件大小的及相應(yīng)行為的控制,需根據(jù)需要自行處理唧龄,本方法只是示例方法兼砖。

$('#u_photo').on('change', function() {
    var file = this.files[0];
    if (file.size > 1024*1000) {
        alert('文件最大1M!')
    }
});

5 JQuery進(jìn)度條

在ajax方法中加入xhr即可控制上傳進(jìn)度既棺,進(jìn)度條可以使用html5的progress也可使用其它的進(jìn)度條讽挟。顯示及隱藏進(jìn)度條需要自行處理,本方法只是簡(jiǎn)單介紹了進(jìn)度條的基本控制丸冕。

xhr: function() {
    var myXhr = $.ajaxSettings.xhr();
    if (myXhr.upload) {
        myXhr.upload.addEventListener('progress', function(e) {
            if (e.lengthComputable) {
                $('progress').attr({
                    value: e.loaded,
                    max: e.total,
                });
            }
        } , false);
    }
    return myXhr;
}

6 springMVC服務(wù)端

6.1 maven依賴

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>

6.2 servlet-context.xml

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

6.3 Controller

示例程序耽梅,并未給出文件驗(yàn)證,存儲(chǔ)及處理的相應(yīng)代碼胖烛。

@RequestMapping(value="/test/upload",method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam("u_photo") MultipartFile u_photo) {
    System.out.println("u_photo="+u_photo.getSize());
    return "ok";
}

7 兼容性

IE 10+, Firefox 4.0+, Chrome 7+, Safari 5+, Opera 12+

8 推薦閱讀

如果對(duì)上述方案不滿意眼姐,推薦使用如下的解決方案:

JQuery File Uploader

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市佩番,隨后出現(xiàn)的幾起案子众旗,更是在濱河造成了極大的恐慌,老刑警劉巖趟畏,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡歧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)利朵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門律想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绍弟,你說(shuō)我怎么就攤上這事技即。” “怎么了樟遣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵姥份,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我年碘,道長(zhǎng),這世上最難降的妖魔是什么展鸡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任屿衅,我火速辦了婚禮,結(jié)果婚禮上莹弊,老公的妹妹穿的比我還像新娘涤久。我一直安慰自己,他們只是感情好忍弛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布响迂。 她就那樣靜靜地躺著,像睡著了一般细疚。 火紅的嫁衣襯著肌膚如雪蔗彤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天疯兼,我揣著相機(jī)與錄音然遏,去河邊找鬼。 笑死吧彪,一個(gè)胖子當(dāng)著我的面吹牛待侵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姨裸,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秧倾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了傀缩?” 一聲冷哼從身側(cè)響起那先,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赡艰,沒(méi)想到半個(gè)月后胃榕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年勋又,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苦掘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楔壤,死狀恐怖鹤啡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹲嚣,我是刑警寧澤递瑰,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站隙畜,受9級(jí)特大地震影響抖部,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜议惰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一慎颗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧言询,春花似錦俯萎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辆憔,卻和暖如春撇眯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虱咧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工叛本, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彤钟。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓来候,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逸雹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子营搅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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