jquery版图片上传插件

图片上传

  • 1.点击其他盒子,触发上传文件的input
  • 2.读取文件,将图片转换成base64
  • 3.封装blob对象
  • 4.将blob对象塞入表单,上传
  • 5.复制代码,完成调用

代码如下

function uploadImage(uploadConfig) {
    var uploadConfig = uploadConfig
    // 将base64转换为blob对象
    function dataURItoBlob(base64Data) {
        var byteString;
        if (base64Data.split(',')[0].indexOf('base64') >= 0)
            byteString = atob(base64Data.split(',')[1]);
        else
            byteString = unescape(base64Data.split(',')[1]);

        var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
        var ia = new Uint8Array(byteString.length);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }
        return new Blob([ia], {type:mimeString});
    }

    // 获取上传进度
    function getUploadProgress(e) {
        var myXhr = $.ajaxSettings.xhr();
        if(uploadConfig.isShowProgress && myXhr.upload) {
            try {
                myXhr.upload.addEventListener('progress', function(e) {
                    if(e.lengthComputable) {
                        var percent = e.loaded / e.total * 100;
                        uploadConfig.loadProgress(percent)
                    }
                }, false);
            } catch(e) {
                console.log(e);
            }
        }
        return myXhr;
    }

    // 转换成base64,上传
    function uploadImg2Base64() {
        /*调用示例:document.getElementById("img_upload").addEventListener('change', uni.ImgToBase64, false);!!!必须用原生js*/
        var file = this.files[0]
        if (!/image\/\w+/.test(file.type)) {
            alert("请确保文件为图像类型");
            return false;
        }
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function (e) {
            var self = this,
                base64String = this.result,
                blob = dataURItoBlob(base64String),
                canvas = document.createElement('canvas'),
                dataURL = canvas.toDataURL('image/jpeg', 0.5),
                fd = new FormData(document.forms[0]);
            // 构建上传参数
            for (var i in uploadConfig.params) {
                fd.append(i, uploadConfig.params[i]);
            }
            fd.append("file", blob, file.name);

            $.ajax({
                url: uploadConfig.url,
                type: 'post',
                data: fd,
                beforeSend: uploadConfig.beforeSend,
                processData:false,
                contentType: false,
                dataType:"json",
                xhr: getUploadProgress,
                success:function(data){
                    uploadConfig.loadSuccess(data)
                    uploadConfig.base64String(self.result)
                },
                error: function (error) {
                    console.log(error)
                }
            })
            return this.result;
        }
    }

    // 点击触发触发上传
    $('#'+uploadConfig.triggerId).click(function () {
        $('#'+uploadConfig.inputId).trigger('click')
    })
    document.getElementById(uploadConfig.inputId).addEventListener('change', uploadImg2Base64, false);
}

调用方式

var uploadConfig = {
    inputId: 'uploadFile',      // 上传图片的inputId
    triggerId: 'defaultUpload', // 触发上传的元素Id
    url: 'http://testnew.api.pingjj.jhcm99.com/api/admin/upload',   // 上传地址
    params: {   // 上传需要携带的参数
        token: 'a8100c30fc194ff275f691336c655ea6'
    },
    beforeSend: function() {
      // 做loadding开始处理
    },
    isShowProgress: false,  // 是否需要展示上传进度
    loadProgress: function (progress) {     // 上传进度回调
        console.log(progress)
    },
    base64String: function (base64Str) {    // 获取本地的base64字符串做展示
        console.log(base64Str)
    },
    loadSuccess: function (data) {      // 上传完成后回调
        console.log(data)
    }
}
uploadImage(uploadConfig)

转载于:https://my.oschina.net/chinahufei/blog/2209616

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值