首頁  >  文章  >  web前端  >  Html5如何實作檔案非同步上傳功能的實例分析

Html5如何實作檔案非同步上傳功能的實例分析

黄舟
黄舟原創
2017-05-21 14:24:071481瀏覽

本文簡單介紹利用Html5FormData實作檔案的非同步上傳,也可以實作上傳進度條和檔案大小驗證等,程式碼簡單易懂,非常不錯,具有參考借鏡價值,需要的朋友參考下吧

1 簡介

開發檔案上傳功能從來不是一件愉快的事,非同步上傳更是如此,使用過iframe和Flash的上傳方案,也都感覺十分的別扭。本文簡單簡紹利用Html5的FormData實作檔案的非同步上傳,也可以實現上傳進度條和檔案大小驗證等。服務端使用springMVC的方案進行處理。

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(&#39;click&#39;, function() {
    $.ajax({
        url:"/test/upload",
        type:"post",
        data:new FormData($("#myForm").get(0)),
        //十分重要,不能省略
        cache: false,
        processData: false,
        contentType: false,
        success: function () {
            alert("上传成功!");
        }
    });
});

4 JQuery檔案大小驗證

#檔案大小的及對應行為的控制,需依需求自行處理,本方法只是範例方法。

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

5 JQuery進度條

在ajax方法中加入xhr即可控制上傳進度,進度列可以使用html5的progress也可使用其它的進度條。顯示及隱藏進度條需要自行處理,本方法只是簡單介紹了進度條的基本控制。

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

6 springMVC服務端

#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

##範例程序,並未給予檔案驗證,儲存及處理的對應程式碼。

@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+,

Chr##ome 7+, Safari 5+ , Opera 12+

8 推薦閱讀#如果對上述方案不滿意,推薦使用如下的解決方案:

JQuery File Uploader

以上是Html5如何實作檔案非同步上傳功能的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn