美文网首页Vue.js专区
撸一个在vue中使用七牛上传的组件

撸一个在vue中使用七牛上传的组件

作者: August_____ | 来源:发表于2016-07-30 22:32 被阅读2730次

    最近因为项目中用到了七牛上传,因此封装了个组件,以便提高效率。

    注:七牛 JavaScript SDK使用指南官网

    下载七牛并引入静态资源

    组件代码

    html部分

    <template>
        <div class="upload">
            <div class="upload-pickfiles-lists" v-for="n in uploadurl.length">
                <div class="xg-upload-pickfiles">
                    <img :src="uploadurl[n]">
                </div>
                <a @click="del($index)">删除</a>
            </div>
            <div :id="container" class="upload-container">
                <div class="upload-pickfiles" :id="pickfiles" v-if="uploadurl.length < max">
                </div>
            </div>
        </div>
    </template>
    

    js部分

    module.exports = {
            props:{
                // 最大上传数量
                max:{
                    type:Number,
                    twoWay:true
                }, 
                // 返回的上传地址
                uploadurl:{
                    type: Array,
                    twoWay:true,
                },
                // 拖拽区域
                container:{
                    type: String,
                    twoWay:false
                },
                // inputID
                pickfiles:{
                    type: String,
                    twoWay:false
                },
                // 多选上传
                multiple:{
                    type:Boolean,
                    twoWay: false
                }
            },
            ready(){
                this.qiniu();
            },
            methods:{
    
                qiniu(){
                    const self = this;
                    const uploader = Qiniu.uploader({
                         runtimes: 'html5,flash,html4',    //上传模式,依次退化
                                browse_button: self.pickfiles,       //上传选择的点选按钮,**必需**
                                uptoken_url: '/token',            //Ajax请求upToken的Url,**强烈建议设置**(服务端提供)
                                // uptoken : '', //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成
                                // unique_names: true, // 默认 false,key为文件名。若开启该选项,SDK为自动生成上传成功后的key(文件名)。
                                // save_key: true,   // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK会忽略对key的处理
                                domain: 'http://qiniu-plupload.qiniudn.com/',   //bucket 域名,下载资源时用到,**必需**
                                get_new_uptoken: false,  //设置上传文件的时候是否每次都重新获取新的token
                                container: self.container,           //上传区域DOM ID,默认是browser_button的父元素,
                                max_file_size: '100mb',           //最大文件体积限制
                                flash_swf_url: 'js/plupload/Moxie.swf',  //引入flash,相对路径
                                max_retries: 3,                   //上传失败最大重试次数
                                dragdrop: true,                   //开启可拖曳上传
                                drop_element: 'container',        //拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
                                chunk_size: '4mb',                //分块上传时,每片的体积
                                auto_start: true,                 //选择文件后自动上传,若关闭需要自己绑定事件触发上传
                                multi_selection:self.multiple,   //多选上传
                        filters : {
                            max_file_size : '100mb',
                            prevent_duplicates: true,
                            mime_types: [
                                { title : 'Image files', extensions : 'JPEG,jpg,png' }, // 限定jpg,gif,png后缀上传
                                ]
                            },
                            init: {
                            // 'FilesAdded': function (up, files) {
                            //     $('table').show();
                            //     $('#success').hide();
                            //     plupload.each(files, function (file) {
                            //     });
                            // },
                            // BeforeUpload(up, file) {
                            // },
                            // 'UploadProgress': function (up, file) {
    
                            // },
                            // 'UploadComplete': function () {
    
                            // },
                            FileUploaded(up, file, info) {
                                const domain = up.getOption('domain');
                                const res = JSON.parse(info);
                                const sourceLink = domain + res.key;
                                self.uploadurl.push(sourceLink);
                                console.info(self.uploadurl);
                            },
                            Error(up, err, errTip) {
                                // $('table').show();
                                // const progress = new FileProgress(err.file, 'fsUploadProgress');
                                // progress.setError();
                                // progress.setStatus(errTip);
                            }
                        }
                    });
                },
                del(index){
                    this.uploadurl.splice(index, 1);
                }
            }
        };
    

    使用组件

    import upload from './../components/upload.vue';
    components: {
          upload,
        },
    
    <upload :uploadurl="uploadimgs" :pickfile ="pickfiles" : multiple="true">
                    <div slot="upload">
                      <div :id="pickfiles" class="btn">点击添加门店logo/照片<img :src="uploadimgs" class="uploadimg"></div>
                    </div>
                  </upload>
    

    这样就可以愉快地上传了

    • 如有遗漏或不恰之处,敬请见谅并指出

    相关文章

      网友评论

        本文标题:撸一个在vue中使用七牛上传的组件

        本文链接:https://www.haomeiwen.com/subject/eaytsttx.html