vue文件上传功能bootstrap框架

vue文件上传功能bootstrap框架

封装公共组件components/fileupload/FileUpload.vue 内容如下:

公共组件


```html
<template>
    <div component_name="FileUpload" :component_id="id">
        <div class="input-group">
            <input v-model="input_file_name" style="height: 30px" class="form-control">
            <label class="input-group-btn" :refid="refId">
                <input type="button" @click="showUploadWindow" style="height: 31px" value="浏览文件" class="btn btn-primary">
                <input type="file" :ref="refId" @change="selectedFile" style="display: none">
            </label>
        </div>
        <div class="error_validate_msg" v-if="file_input_err_msg!=null && file_input_err_msg!=undefined"><em>{{file_input_err_msg}}</em></div>
    </div>
</template>
<script>
    /**
     * 组件名称:文件上传组件
     * 特性
     *  1、注意此组件不提供v-model操作,因为此组件通常不可直接参与表单提交
     *  2、必须为该组件设置唯一ID
     */
    export default {
        name:"FileUpload",
        props:{
            accept:{
                type:Array,
                required:false
            },
            limitSize:{//单位:字节
                type:Number,
                required:false
            },
            id:{//组件唯一ID
                type:String,
                default:null
            }
        },
        data:function(){
            return {
                input_file_name:'',
                refId:null,
                file_input_err_msg:null
            }
        },
        created:function(){
            if(!this.id){
                alert('!ERROR:必须为FileUpload组件设置唯一ID');
            }
            this.refId = 'ref_file_fileupload'+this.id;
        },
        mounted:function(){
            
        },
        methods:{
            selectedFile:function(){
                this.file_input_err_msg = null;
                let file = this.$refs[this.refId].files[0];
                this.input_file_name = file.name;
                //判定文件的后缀
                if(this.accept){
                    let index = this.input_file_name.lastIndexOf(".");
                    let suffix = this.input_file_name.substring(index+1);
                    let check = this.accept.filter(x=>x.toLowerCase() == suffix.toLowerCase());
                    if(!check || check.length == 0){
                        this.file_input_err_msg = '文件格式错误,不支持的文件扩展名:'+suffix;
                        return;
                    }
                }
                //判定文件的大小
                if(this.limitSize){
                    if(file.size>this.limitSize){
                        this.file_input_err_msg = '文件大小超过限制';
                        return;
                    }
                }
                this.$emit('fileselected',file);
            },
            showUploadWindow:function(){
                this.$refs[this.refId].dispatchEvent(new MouseEvent('click'));
            },
			clear:function(){
				this.$refs[this.refId].value = '';
				this.input_file_name = null;
				this.file_input_err_msg = null;
			}
        }
    }
</script>

用法
页面标签

<file-upload
  v-model="model.pxfa"
  name="pxfa"
  v-validate="{ required: true }"
  data-vv-as="整体方案"
  id="zypx_zcxx_bt_imp_fp"
  :accept="['doc', 'docx']"
  @fileselected="fileselected"
></file-upload>

script中的方法 通过formdata发送请求 然后获取一段url地址

    fileselected: function(file) {
      let formdata = new FormData();
      formdata.append("file", file);
      this.$http
        .post("/htgl/biz/myNeeds/upload", formdata, {
          "Content-Type": "multipart/form-data",
        })
        .then((res) => {
          if (res.data) {
            this.model.pxfa = res.data.url;
          }
        });
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值