七牛上传图片使用心得

使用七牛进行图片、视频的上传,简单又高效。官方javascript-sdk地址:developer.qiniu.com/kodo/sdk/12…

常用功能有:

1.多图或单图上传

2.限制上传格式、大小

3.上传失败,重新上传

4.上传过程中终止上传

5.上传进度计算

引入qiniu.js后,配置讲解

var uploader = Qiniu.uploader({
    disable_statistics_report: true,
    makeLogFunc: 1,
    runtimes: 'html5,flash,html4',
    browse_button: 'pickimg',
    container: 'btnlist',
    max_file_size: '20mb',
    dragdrop: false,
    chunk_size: '4mb',
    multi_selection: true,
    uptoken_url: '/management/upload/getqiniuuptoken.do',//token获取地址
    uptoken_func:function(file){//如果token获取地址不一致,使用
        var uptoken = "";
        var url = "";
        if(file.type.indexOf("video")>-1 || self.videoType.indexOf(file.name.split('.')[1]) > -1){         // 添加视频token处理
            url = "";
            self.uploader.domain = '';
        }
        if(file.type.indexOf("image")>-1){
            url = "";
            self.uploader.domain = '';
        }
        $.ajax({
            url: url,
            dataType: "json",
            type: "get",
            async: false,
            success: function (data) {
                uptoken = data.uptoken;
            },
            error: function (a, b) {

            }
        });
        return uptoken;
    },
    unique_names: false,
    save_key: false,
    max_retries: 0,                     // 上传失败最大重试次数
    domain: 'http://you2.autoimg.cn/',
    get_new_uptoken: true,
    auto_start: true,//文件选择完毕后自动上传
    log_level: 0,
    init: {
        'FilesAdded': function (up, files) {
            self.processPercent = 0;
            self.uploadImgList ={ids:[],files:[]};

            self.uploadImgList.files = files;

            // 显示上传进度
            self.showUploadProcess = true;

            // 上传的图片数量
            self.uploadImgNum = files.length;
            imgMum = files.length;



            plupload.each(files, function (file) {
                if(file.type=='image/jpeg'||file.type=='image/jpg'||file.type=='image/png'||file.type=='image/bmp'){

                }else{
                    alert("文件格式不正确,请选择上传jpg、png、bmp格式图片");
                    up.removeFile(file);
                    self.showUploadProcess = false;
                    return false;
                }
            });

        },
        'BeforeUpload': function (up, file) {

        },
        'FileUploaded': function (up, file, info) {//单张图片上传成功处理
            if (info.status == "200") {
                var imgUrl = "http://you2.autoimg.cn/"+JSON.parse(info.response).key;
                self.uploadImgList.ids.push(imgUrl);
                imgMum--;

            }
            if(imgMum == 0){
                self.saveImg(self.uploadImgList.ids.join(','));
            }
        },

        'UploadComplete':function(up, file, info){

        },
        'Error': function (up, err, errTip) {

        },
        'Key': function (up, file) {
            // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
            // 该配置必须要在 unique_names: false , save_key: false 时才生效
            var uuid = utils.uuid();
            var key = "_autohomecar__zhouyouji/" + uuid + ".jpg";
            return key;
        },
        'UploadProgress': function (up, file) {

            var files = up.files;
            var uploaded = 0;
            for(var i=0;i<files.length;i++){

                uploaded += files[i].percent;
            }

            self.processPercent = parseInt(uploaded/(files.length*100)*100);

        }
    }
});
复制代码

注意点:

1.实现上传终止,七牛配置中有stop方法,它支持暂停上传,再次开启start上传后会继续上传,并不能实现终止结束,即使删除up中的files,上传一旦开始就无法撤销,所以我的实现方案是利用destroy将实例销毁,销毁后再重新绑定,之前的图片就会终止上传。

2.上传按钮的位置如果有变化(如点击后按钮消失),由于七牛的实现方案是在上传按钮的位置放置了一个div,div里有真正上传使用的input,所以即使将自己的上传按钮隐藏,点击该位置依然会触发上传。建议将真正的上传按钮放置到边缘位置,触发方式采用手动click

3.UploadProgress中可以得到已上传文件的上传进度百分比,如果想得到总的上传进度,需要自己计算下

4.重新上传是在qiniu.js中添加自定义方法retryUploadFile:调用 uploader.retryUploadFile(fileId);

retryUploadFile: function(id){
    var file, count = 0, i;
    this.state = plupload.STARTED;
    // Find first QUEUED file
    if(files) {
        for (i = 0; i < files.length; i++) {
            if (files[i].id == id) {
                file = files[i];
                if (this.trigger("BeforeUpload", file)) {
                    file.status = plupload.UPLOADING;
                    this.trigger("UploadFile", file);
                }
            }
        }

        // All files are DONE or FAILED
        //if (count == files.length) {
            if (this.state !== plupload.STOPPED) {
                this.state = plupload.STOPPED;
                this.trigger("StateChanged");
            }
            this.trigger("UploadComplete", files);
        //}
    }
}
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值