activexobject实现从客户端本地上传文件到服务器端
将本地文件上传到服务器步骤
1.本地文件转Base64
2.Base64转file
3.将file上传到后台服务器
js代码如下
//本地文件转base64 function pathToBase64(file) { try{ var type=file.slice(file.lastIndexOf(".")+1) var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.6.0');// 要用MSXML2.XMLHTTP.6.0,不要用MSXML2.XMLHTTP(会报错"没有权限") xmlHttp.open('POST',file, false); xmlHttp.send(''); var xml_dom = new ActiveXObject('MSXML2.DOMDocument'); var tmpNode = xml_dom.createElement('tmpNode'); tmpNode.dataType = 'bin.base64'; tmpNode.nodeTypedValue = xmlHttp.responseBody; var fileBase=""; switch (type) { case "pdf":fileBase="data:application/pdf;base64,";break; case "jpg":fileBase="data:image/jpg;base64,";break; case "png":fileBase="data:image/png;base64,";break; case "bmp":fileBase="data:image/bmp;base64,";break; } var imgBase64Data = fileBase+tmpNode.text.replace(/\n/g,""); return imgBase64Data; }catch (e) { console.log("pathToBase64 error:",JSON.stringify(e)); return false; } } //base64转File(IE) function dataURLtoFile(dataurl){ if(!dataurl){ alert("The file path does not exist");return false;//文件路径不存在 } var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } var theBlob=new Blob([u8arr], { type: mime }); theBlob["lastModifiedDate"] = new Date(); // theBlob["name"] = fileName; //此处赋值不管用 return theBlob; } //上传file到服务器 function uploadToServer(file,fileName) { var formData = new FormData(document.getElementById("form")); formData.append("file",file) formData.append("fileName",fileName) jQuery.support.cors = true;//解决ie中ajax跨域 $.ajax({ url:"upload.php", // 后端上传接口地址 type:"POST", data:formData, processData:false, contentType:false, success:function(data){ var data=JSON.parse(data); if(data.status == 1){ alert("上传成功"); } }, error:function(data){ alert(JSON.stringify(data)); } }); } //上传 function clickBtn() { if(!!window.ActiveXObject || "ActiveXObject" in window){ var path="C:\\Users\\cjq\\Desktop\\formData上传文件\\pdf2.pdf"; // 本地文件目录 var fileName=path.slice(path.lastIndexOf("\\")+1) var ret=this.pathToBase64(path); if(ret)var file=dataURLtoFile(ret) if(file)uploadToServer(file,fileName); }else{ alert("请使用ie浏览器"); } } // 触发上传 clickBtn();
upload.php
if ($_FILES["file"]["error"] > 0){ $ret=array( "status" => 0, ); }else{ $file=$_FILES["file"]; $name=$_POST["fileName"]; $path="../Upload/".$name;// 后台上传目录 $info=move_uploaded_file($file["tmp_name"],$path); if ($info) { $ret=array( "status" => 1, "data"=>$info ); }else{ $ret=array( "status" => 0, ); } } exit(json_encode(array_merge(array('status' => 1), $ret? $ret : array())));
注意事项
1.ie会报“无权限”的错误,需要设置:Internet选项 -> 安全
①自定义级别 -> ActiveX控件和插件 下面的子选项都勾选为“启用”
②自定义级别 -> 通过域访问数据源 设置为“启用”
③受信任的站点 -> 站点 -> 将自己允许操作上传的域名(或ip)添加进去

浙公网安备 33010602011771号