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)添加进去

posted @ 2020-10-26 11:06  卷叶小树  阅读(751)  评论(0)    收藏  举报