七牛javascript图片上传!

来源:互联网 发布:领英是什么软件 编辑:程序博客网 时间:2024/05/15 07:08

七牛图片上传

七牛图片上传在前端做操作时需要注意的流程:

  • 首先需要调用本地图片库获取到图片
  • 然后调用后台API,传给后台图片文件名称获取到七牛的dowloadUrl下载头部地址和uploadToken
  • 调用七牛的upload方法,将图片上传到七牛服务器,返回来图片的正式下载地址

话不多说,直接贴代码看:

var IMG_LENGTH = 1;//图片最大1MBvar IMG_MAXCOUNT = 8;//最多选中图片张数var IMG_AJAXPATH = "http://up.qiniu.com";//异步传输服务端位置var UP_IMGCOUNT = 0;//上传图片张数记录//打开文件选择对话框$("#div_imgfile").click(function () {    if ($(".lookimg").length >= IMG_MAXCOUNT) {        alert("一次最多上传" + IMG_MAXCOUNT + "张图片");        return;    }    var _CRE_FILE = document.createElement("input");    if ($(".imgfile").length <= $(".lookimg").length) {//个数不足则新创建对象        _CRE_FILE.setAttribute("type", "file");        _CRE_FILE.setAttribute("class", "imgfile");        _CRE_FILE.setAttribute("accept", ".png,.jpg,.jpeg");        _CRE_FILE.setAttribute("num", UP_IMGCOUNT);//记录此对象对应的编号        $("#div_imgfile").after(_CRE_FILE);    }    else { //否则获取最后未使用对象        _CRE_FILE = $(".imgfile").eq(0).get(0);    }    return $(_CRE_FILE).click();//打开对象选择框});//创建预览图,在动态创建的file元素onchange事件中处理// $(".imgfile").on("change", function () {$(document).on("change",".imgfile",function () {        if ($(this).val().length > 0) {//判断是否有选中图片        //判断图片格式是否正确        var FORMAT = $(this).val().substr($(this).val().length - 3, 3);        if (FORMAT != "png" && FORMAT != "jpg" && FORMAT != "peg" && FORMAT != "PNG" && FORMAT != "JPG" && FORMAT != "PEG") {            alert("文件格式不正确!!!");            return;        }         //判断图片是否过大,当前设置1MB        var file = this.files[0];//获取file文件对象        if (file.size > (IMG_LENGTH * 1024 * 1024)) {            alert("图片大小不能超过" + IMG_LENGTH + "MB");            $(this).val("");            return;        }        //判断图片是否过大,当前设置1MB        var file = this.files[0];//获取file文件对象        if (file.size > (IMG_LENGTH * 1024 * 1024)) {            alert("图片大小不能超过" + IMG_LENGTH + "MB");            $(this).val("");            return;        }        var Qiniu_UploadUrl = "http://up.qiniu.com";        var headerPicFile = "headerPicFile";        var headerPic = "headerPic";        var token = "";        var filekey ="";        var dowloadUrl = "";        var Qiniu_upload = function(f, token, key,dowloadUrl) {//token,filekey,dowloadUrl        var xhr = new XMLHttpRequest();        xhr.open('POST', Qiniu_UploadUrl, false);        var formData, startDate;        formData = new FormData();        if (key !== null && key !== undefined && key !=""){            formData.append('key', key)        };        formData.append('token', token);        formData.append('file', f);        xhr.onreadystatechange = function(response) {            console.log("file="+f);            console.log("token="+token);            console.log("key="+key);            console.log("dowloadUrl="+dowloadUrl);            console.log("status="+xhr.status);            console.log("readyState="+xhr.readyState);            if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") {                var blkRet = JSON.parse(xhr.responseText);                console.log(dowloadUrl+blkRet.key);                //创建预览外层                var _prevdiv = document.createElement("div");                _prevdiv.setAttribute("class", "lookimg active");                //创建内层img对象                var preview = document.createElement("img");                $(preview).attr("data-url",dowloadUrl+blkRet.key);                $(preview).attr("data-state",1);                $(_prevdiv).append(preview);                //创建背景框                var IMG_DELBTN = document.createElement("span");                IMG_DELBTN.setAttribute("class", "lookimg_bk");                $(_prevdiv).append(IMG_DELBTN);                //创建删除按钮                var IMG_DELBTN = document.createElement("div");                IMG_DELBTN.setAttribute("class", "lookimg_delBtn");                //IMG_DELBTN.innerHTML = "<img src='images/icon/err.bg.png'/>";                $(_prevdiv).append(IMG_DELBTN);                //创建进度条                // var IMG_PROGRESS = document.createElement("div");                // IMG_PROGRESS.setAttribute("class", "lookimg_progress");                // $(IMG_PROGRESS).append(document.createElement("div"));                // $(_prevdiv).append(IMG_PROGRESS);                //记录此对象对应编号                _prevdiv.setAttribute("num", $(this).attr("num"));                //对象注入界面                //$("#div_imglook").children("div:last").before(_prevdiv);                //$("#div_imglook").empty();//每次上传清空之前的图片                $("#div_imglook").append(_prevdiv);                UP_IMGCOUNT++;//编号增长防重复                //预览功能 start                var reader = new FileReader();//创建读取对象                reader.onloadend = function () {                    preview.src = reader.result;//读取加载,将图片编码绑定到元素                }                if (file) {//如果对象正确                    reader.readAsDataURL(file);//获取图片编码                } else {                    preview.src = "";//返回空值                }                //预览功能 end            } else if (xhr.status != 200 && xhr.responseText) {                alert("上传失败!");            }        };        startDate = new Date().getTime();        $("#progressbar").show();        xhr.send(formData);        console.log(formData);    };        filekey = file.name+"_"+new Date().getTime();       //请求后台接口获取上传token和上传地址        $.ajax({            type: "POST",            url:"http://devapi.qiyuyd.com/upload/getUploadToken",            headers: {              "Content-Type":"application/x-www-form-urlencoded"           },            data:"fileName="+filekey,            dataType: 'JSONP',                       jsonp: 'callbackFunName',            //ContentDisposition:"form-data; name='text'" ,            //ContentType:"application/json;charset=utf-8",            //contentLength:0,            async : false,            success: function (data) {                if(data.code==0){                    console.log(data);                    token = data.data.uploadToken;                    dowloadUrl = data.data.dowloadUrl;                    //console.log(filekey);                    if(filekey.indexOf(dowloadUrl)>=0){                        // if(filekey.indexOf(dowloadUrl)>=0){                        //     filekey  = filekey.substring(dowloadUrl.length);                        // }                    }                    //Qiniu_upload(token,filekey,dowloadUrl);                    if ($(".imgfile")[0].files.length > 0 && token != "") {                        //              uploadstatus(2,"正在上传",5,headerPicFile);                        Qiniu_upload($(".imgfile")[0].files[0], token,  filekey,dowloadUrl);                    } else {                        //              uploadstatus(3,"请选择文件",3,headerPicFile);                        console && console.log("form input error");                    }                }else{                    alert("获取上传Token失败");                }            },            error: function (error) {                //服务器连接失败报错处理                // alert("error");                console.log('错误');                console.log(error.responseText);            }        });    }});//删除选中图片$(document).on("click",".lookimg_delBtn",function () { // $(".lookimg_delBtn").on("click", function () {    $(".imgfile[num=" + $(this).parent().attr("num") + "]").remove();//移除图片file    $(this).parent().remove();//移除图片显示});////删除按钮移入移出效果//$(".lookimg").live("mouseover", function () {//  if ($(this).attr("ISUP") != "1")//      $(this).children(".lookimg_delBtn").eq(0).css("display", "block");;//});//$(".lookimg").live("mouseout", function () {//  $(this).children(".lookimg_delBtn").eq(0).css("display", "none");;//});//确定上传按钮$("#btn_ImgUpStart").click(function () {    if ($(".lookimg").length <= 0) {        alert("还未选择需要上传的图片");        return;    }    //全部图片上传完毕限制    if ($(".lookimg[ISUP=1]").length == $(".lookimg").length) {        alert("图片已全部上传完毕!");        return;    }    //循环所有已存在的图片对象,准备上传    for (var i = 0; i < $(".lookimg").length; i++) {        var NOWLOOK = $(".lookimg").eq(i);//当前操作的图片预览对象        NOWLOOK.index = i;        //如果当前图片已经上传,则不再重复上传        if (NOWLOOK.attr("ISUP") == "1")            continue;        //上传图片准备        var IMG_BASE = NOWLOOK.children("img").eq(0).attr("src"); //要上传的图片的base64编码        var IMG_IND = NOWLOOK.attr("num");        var IMG_ROUTE = $(".imgfile[num=" + IMG_IND + "]").eq(0).val();//获取上传图片路径,为获取图片类型使用        var IMG_ENDFOUR = IMG_ROUTE.substr(IMG_ROUTE.length - 4, 4);//截取路径后四位,判断图片类型        var IMG_FOMATE = "jpeg"; //图片类型***        if (IMG_ENDFOUR.trim() == ".jpg")            IMG_FOMATE = "jpg";        else if (IMG_ENDFOUR.trim() == ".png")            IMG_FOMATE = "png";    }});

上面的代码注释写的很详细,虽然没有精简代码。但是可以自定义编辑,给上传插件添加更多内容。
我在里面添加了图片删除按钮,可以将图片移除。对上传的图片也做了数量和大小的限制,同时也可以改变图片的格式。顺便贴上html的图片:这里写图片描述

原创粉丝点击