Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify。。。悲剧
对于Ajax文件上传,大体是有:
1、创建一个input type="file" 的文件上传按钮,根据其id监听绑定其change事件,在事件中用jquery创建一个iframe,嵌入添加隐藏form,同时创建input type="file",id相同的文件上传按钮,并传入其他需要提交的数据,然后提交,提交完成后移除一个input type="file",这样用bind或on的绑定就对新的input 框失效,需要重新再绑定一次change事件,以前的jquery是可以使用live函数代替的,现在只能在文件上传成功后再绑定一次change事件。
1 $(function() { 2 uploadFile("fileData",'cn.ftiao.cm.model.LiveCourse','',"CI"); 3 }); 4 5 function uploadFile(id,classFullName,jsonStrValue,preFileName){ 6 $("#"+id).on("change", function(){ 7 // 上传方法 8 $.ajaxFileUpload({ 9 url:$("#"+id).attr("data-url-upload"), //需要链接到服务器地址 10 secureuri:false, 11 type:"post", 12 fileElementId:id, //文件选择框的id属性 13 dataType: 'json', 14 data:{ 15 "classFullName":classFullName, 16 "jsonStrValue":"", 17 "preFileName":preFileName 18 }, 19 //服务器返回的格式,可以是json 20 success: function (data, status){ //相当于java中try语句块的用法 21 $("#courseIconImg").attr("src",$(".ctx").val()+"/images/img-class.png"); 22 alert("hello"); 23 //先将原有的上传展示清除 24 $("#" + id).nextAll("span").remove(); 25 $("#courseIcon").val(data.outputFileName); 26 // $("#coursewareFile").val(data.outputFileName); 27 var uploadHtml = "<span id='"+data.outputPreFileName+"_livelesson_div' style='color:#FFFFFF;'>"; 28 uploadHtml += data.fileUploadName ; 29 uploadHtml += "<a name='_LIVELESSON_PRIVIEW'> 预览 </a><a name='_LIVELESSON_DEL'> 删除 </a>"; 30 uploadHtml += "</span>"; 31 // $("#"+id).parents("li").append(uploadHtml); 32 uploadFile("fileData",'cn.ftiao.cm.model.LiveCourse','',"CI"); 33 }, 34 error: function (data, status, e) //相当于java中catch语句块的用法 35 { 36 alert(e); 37 } 38 }); 39 }); 40 return false; 41 }