這次帶給大家H5檔非同步上傳,H5檔案異步上傳的注意事項有哪些,下面就是實戰案例,一起來看一下。
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('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檔案大小驗證
檔案大小的及對應行為的控制,需依需求自行處理,本方法只是範例方法。
$('#u_photo').on('change', function() { var file = this.files[0]; if (file.size > 1024*1000) { alert('文件最大1M!') } });
5 JQuery進度條
在ajax方法中加入xhr即可控制上傳進度,進度列可以使用html5的progress也可使用其它的進度條。顯示及隱藏進度條需要自行處理,本方法只是簡單介紹了進度條的基本控制。
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服務端
#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+, Chrome 7+, Safari 5+, Opera 12+
8 推薦閱讀
如果對上述方案不滿意,推薦使用如下的解決方案:
JQuery File Uploader
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是H5文件異步上傳的詳細內容。更多資訊請關注PHP中文網其他相關文章!