vue+elementui 上传文件时限制上传文件的类型和大小

本文介绍了如何在Vue+ElementUI的上传组件中设置`before-upload`属性,以限制用户只能上传Excel(xlsx、xls)格式且大小不超过500KB的文件。通过检查文件的后缀名和大小来实现这一功能,当文件类型或大小不符合要求时,会显示警告消息。
摘要由CSDN通过智能技术生成

vue+elementui 上传文件时限制上传文件的类型和大小

  • 重点属性–:before-upload="beforeAvatarUpload"

html代码:

<el-upload class="upload-demo"
                       ref="upload1"
                       :action="baseUrl+'/module/v1/manage/'"
                       :data="{optype:'1',productid:this.formInline.productidDetails,
                       modulename:this.formInline.modulenameDetails,desc:this.formInline.descDetails,
                       username:this.updateuser,moduleid:this.moduleidDetails}"
                       :file-list="fileList1"
                       :before-upload="beforeAvatarUpload"
                       :auto-upload="false">
              <el-button slot="trigger"
                         size="small"
                         type="">选取文件</el-button>
              <div slot="tip"
                   style="width: 260px;"
                   class="el-upload__tip">只能上传excel格式文件,文件不能超过500kb</div>
            </el-upload>

js代码:

    beforeAvatarUpload1 (file) {
      var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
      const extension3 = testmsg === 'xlsx'
      this.extension3 = extension3
      const extension4 = testmsg === 'xls'
      this.extension4 = extension4
      const isLt2M1 = file.size / 1024 < 500
      this.isLt2M1 = isLt2M1
      if (!this.extension3 && !this.extension4) {
        this.$message({
          message: '上传文件只能是excel格式!',
          type: 'warning'
        });
      }
      if (!isLt2M1) {
        this.$message({
          message: '上传文件大小不能超过 500kB!',
          type: 'warning'
        });
      }
      return this.extension3 || this.extension4 && isLt2M1
    },

又是打工的一天,欢迎大家私信提建议~~~

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大文件分片上传通常需要以下步骤: 1. 切片:将大文件切成多个小文件,每个小文件大小一般在几十 KB 到几 MB 之间。 2. 上传:将每个小文件上传到服务器,可以使用 AJAX 或 WebSocket 等技术实现。 3. 合并:将所有上传的小文件合并成一个完整的大文件。 在 Vue 中,可以使用 element-ui 中的 Upload 组件实现文件上传功能。具体步骤如下: 1. 设置上传地址和上传方式: ```html <el-upload action="/upload" :http-request="uploadFile" :on-exceed="handleExceed" :limit="3" :file-list="fileList"> </el-upload> ``` 其中,`action` 表示上传地址,`http-request` 表示上传方法,`on-exceed` 表示超出文件数量限制的回调函数,`limit` 表示最多上传文件数量,`file-list` 表示已上传的文件列表。 2. 实现上传方法: ```javascript async uploadFile(file) { // 切片文件 const chunks = await this.splitFile(file) // 上传文件 const response = await this.uploadChunks(chunks) // 合并文件 await this.mergeFile(response.data) }, ``` 其中,`splitFile` 方法用于将文件切片,`uploadChunks` 方法用于上传切片文件,`mergeFile` 方法用于合并文件。 3. 实现切片方法: ```javascript async splitFile(file) { const chunkSize = 2 * 1024 * 1024 // 每个切片文件大小为 2MB const chunks = [] let start = 0 let index = 0 while (start < file.size) { const end = Math.min(start + chunkSize, file.size) const chunk = file.slice(start, end) chunks.push({ file: chunk, index: index, name: file.name, size: chunk.size, total: chunks.length, }) start += chunkSize index++ } return chunks }, ``` 该方法将文件切成多个大小相等的切片文件,并返回一个包含切片信息的数组。 4. 实现上传切片文件方法: ```javascript async uploadChunks(chunks) { const responses = [] for (const chunk of chunks) { const formData = new FormData() formData.append('file', chunk.file) formData.append('name', chunk.name) formData.append('index', chunk.index) formData.append('size', chunk.size) formData.append('total', chunk.total) const response = await axios.post('/upload', formData) responses.push(response) } return responses[0] }, ``` 该方法使用 axios 发送 POST 请求,将切片文件和切片信息一起发送到服务器。 5. 实现合并文件方法: ```javascript async mergeFile(data) { const formData = new FormData() formData.append('name', data.name) formData.append('size', data.size) formData.append('total', data.total) const response = await axios.post('/merge', formData) console.log(response.data) }, ``` 该方法将所有切片文件的信息发送到服务器,服务器根据切片信息将所有切片文件合并成一个完整的文件。 以上就是使用 Vueelement-ui 实现大文件分片上传的基本步骤。需要注意的是,由于切片和上传都是异步操作,因此需要使用 async/await 或 Promise 等方式来处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值