js jq img doc docx转成base64 base64转成file对象 上传ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery-1.9.1.min.js"></script>
    <script src="file.js"></script>
</head>


<body>
<input type="file" class="file" multiple>

<div id="file"></div>
</body>
<script>

    $("body").delegate(".file", "change", function(){

        uploadFile( $(this).val(),$(this)[0].files)


    })


    // function objFile() {
    //     console.log("123")
    // }
</script>
</html>



file.js文件
function uploadFile(fileName,fileThis) {

//获取文件名称
// return  fileName = $(this).val();
//标识
var file=false
var fileType=""
//判断filename
if(fileName==undefined||fileName==""){
    this.file=false
    if(file==false){
        $(this).prev().text(abridge);
    }
}else{
    //截取成  文件.xlsx  fn=文件.xlsx
    fn=fileName.substring(fileName.lastIndexOf("\\")+1);
    //fileType 文件类型 后缀名
    fileType=fn.split('.')[1]
    //设置成全局
    abridge=fn
    // $(this).prev().text(fn);
     $("#file").text(fn)
    this.file=true
}


//你的选的文件长度
if(fileThis.length==1){
    // 如果选择的文件格式是png jpg
    if(fileType=="png"||fileType=="jpg"){
        //直接调取objFile方法
        objFile(fileThis)
    }else{
        var reader = new FileReader();
        reader.readAsDataURL(fileThis[0])
        reader.onload = function () {
            var result=this.result
            if (result.indexOf('application/octet-stream')) {
                if ('docx' === fileType) {
                    result = result.replace('application/octet-stream', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')
                }
                if ('doc' === fileType) {
                    result = result.replace('application/octet-stream', 'application/msword')
                }
            }
            //base64
            console.log(result)

            // fileList.push({
            //     file: result,
            //     toolId:formId,
            //     toolDetailId:toolDetailId,
            //     type: type
            // })



            function dataURLtoFile(dataurl) {
                var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],

                    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
                console.log(mime)
                console.log(arr)
                while(n--){
                    u8arr[n] = bstr.charCodeAt(n);
                }
                return new File([u8arr],'1.word',{type:mime});
            }
            // dataURLtoFile(result,name)
            // console.log(File)
            var formData = new FormData();
            formData.append("file", dataURLtoFile(result));
            console.log(formData)

        }
    }
}else{
    //var 存储
    let arrObj=[]
    //遍历当前选择的文件push到arrObj里
    for(let i=0;i<fileThis.length;i++){
        arrObj.push(fileThis[i]);
    }

    arrObj.forEach((val)=> {
        valType=val
    })
    //截取文件后缀名
    let fileType=valType.name.split('.')[1]
    if(fileType==("pdf")||fileType==("doc")||fileType==("docx")){
        // $("#wrapTips").css("display", "block"),
        //     $(".cont_span").html("文件多选时,只支持png,jpg请重新上传")
        // return false
        alert("文件多选时间,支支持png.jpg")
        console.log("文件多选时间,支支持png.jpg")
    }else{
        objFile(fileThis)
    }
}

}

function objFile(fileThis) {
    //var 存储
    let arrObj=[]
    //遍历当前选择的文件push到arrObj里
    for(let i=0;i<fileThis.length;i++){
        arrObj.push(fileThis[i]);
    }

var p = new Promise(function(resolve,reject){
    var arr2 = [];
    arrObj.forEach((val,index)=>{
        let reader = new FileReader();
        reader.readAsDataURL(val);
        reader.onload = function(e){
            arr2.push(e.target.result);
            //当arr数组的元素个数与arr2数组的元素个数相等时证明已经全部转换完成
            if(arr2.length == arrObj.length){
                resolve(arr2);
            }
        }
    })
})

//base64转换完成时执行,将整个res(arr2)转换为JSON字符串
p.then(function(res){
    //转换 base64转成pdf
    var base64=JSON.stringify({files:res})
    console.log(res[0])
    var resdata=res[0]

    function dataURLtoFile(dataurl) {
        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);
        }
        return new File([u8arr],'a.jpg',{type:mime});
    }
    // dataURLtoFile(result,name)
    // console.log(File)
    var formData = new FormData();
    formData.append("file", dataURLtoFile(resdata));
    console.log(formData)

    // switchedPdf(base64)
},function(error){

})

}

function switchedPdf(base64) {
    $.ajax({
        url: '/file/convert/pdf',
        dataType: 'json',
        type: 'POST',
        async: false,
        data: base64,
        processData: false,
        contentType: 'application/json',
        success: function (data) {
            // var  base_64=data.data
            // fileList.push({
            //     file: "data:application/pdf;base64,"+base_64,
            //     toolId:formId,
            //     toolDetailId:toolDetailId,
            //     type: type
            // })
            // fileList=fileList.reverse().filter(function(item,index){
            //     var _index=fileList.findIndex(function(_item){
            //         return item.type == _item.type;
            //     });
            //     return index == _index;
            // });
            // fileList.reverse();
        }
    })
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北境程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值