el-upload手动上传及使用oss批量上传

<template>
  <div>
    <el-form
      ref="formData"
      class="formWidth"
      :model="formData"
      label-width="120px"
      :rules="rules"
    >
      <el-form-item label="文件" class="uploadClass" required prop="fileList">
        <el-upload
          class="upload-demo"
          action="#"
          :on-change="handleChange"
          :auto-upload="false"
          accept=".jpg, .jpeg, .png, .jfif"
          :on-remove="handleRemove"
          :file-list="formData.fileList"
          :on-exceed="handleExceed"
          :limit="5"
          multiple
        >
          <el-button size="small" type="primary">选择文件</el-button>
          <div slot="tip" class="el-upload__tip">
            格式:jpg/png/jfif,限制5个文件
          </div>
        </el-upload>
      </el-form-item>
    </el-form>
    <el-button @click="confirmInfo()">保存</el-button>
  </div>
</template>

<script>
export default {
  name: 'Untitled-1',
  props: {},
  components: {},
  data() {
    return {
      formData: {
        fileList: [],
        code: "",
        name: "",
      },
      rules: {
        name: [{ required: true, message: "请输入文件" }],
      }
    }
  },
  computed: {},
  watch: {},
  created() {},
  mounted() {},
  methods: {
     // 上传之前校验
     handleChange(file, fileList) {
      let fileName = file.name.substring(file.name.lastIndexOf(".") + 1);
      let typeInfo = ["jpg", "jpeg", "png", "jfif"];
      fileName = fileName.toLowerCase();
      if (!typeInfo.includes(fileName)) {
        this.$message({
          type: "warning",
          message: "请上传jpg/png/jfif格式的图片",
        });
        // 过滤掉不符合条件的文件
        this.formData.fileList = this.formData.fileList.filter(
          (list) => list.uid != file.uid
        );
        return false;
      }
      // 存储符合条件的所有fileList数据
      this.formData.fileList = fileList; // 存储上传的文件
      // const isLt2M = file.size < 1024 * 1024 * 3;
      // const isLt2M = file.size < 1024 * 1024 * 30;
      // if (!isLt2M) {
      //   this.$message({
      //     type: "warning",
      //     message: "上传图片大小不能超过30M",
      //   });
      //   return false;
      // }
    },
    handleRemove(file, fileList) {
      // 执行移除方法的时候重新更新数据
      this.formData.fileList = fileList;
    },
    handleExceed(files, fileList) {
      this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
    },
     // 确认上传
     async confirmInfo() {
      // 整体表单校验
      this.$refs.formData.validate(async (valid) => {
        if (!valid) {
          return false;
        }
        let pathUrl = [],
          i = 0;
        for (let list of this.formData.fileList) {
          let targetRoute = `aaa/${list?.name}`;
          // oss上传文件封装的方法
          await putFile(targetRoute, list.raw);
          // 第一次上传oss的时候延迟5ms,用于oss上传函数请求成功并获得返回值,防止循环请求oss token获取函数
          if (i == 0) await this.delay(500);
          pathUrl.push(targetRoute);
          i++;
        }
        console.log('pathUrl---',pathUrl)
      });
    },
    // 延迟函数
    async delay(ms) {
      return new Promise((resolve) => {
        setTimeout(resolve, ms);
      });
    },
  },
}
</script>

<style scoped></style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用<el-upload>上传oss的步骤如下: 1. 在<el-upload>组件设置ref属性为"upload",并设置action属性为上传接口的URL地址。同时,设置multiple属性为true以支持多文件上传,设置limit属性为上传文件的数量限制。例如:<el-upload ref="upload" action="/upload" multiple :limit="3"> 2. 在methods定义httpRequest方法,该方法用于调用服务端接口获取上传凭证。在该方法,可以使用createUploadStsToken方法来获取上传凭证。例如:createUploadStsToken(this.folderId).then(res => { // 获取上传凭证的逻辑 }) 3. 在methods定义handleRemove方法,该方法用于在文件上传前进行校验。可以在该方法进行文件大小、文件类型等的校验。例如:beforeAvatarUpload(file) { // 文件上传前的校验逻辑 } 4. 在methods定义beforeAvatarUpload方法,该方法用于在文件上传前进行校验。可以在该方法进行文件大小、文件类型等的校验。例如:beforeAvatarUpload(file) { // 文件上传前的校验逻辑 } 5. 在data定义fileList数组,用于存储上传的文件列表。例如:data() { return { fileList: [] } } 6. 在<el-upload>组件使用file-list属性绑定fileList数组,以实现文件的回显功能。例如:<el-upload :file-list="fileList"> 7. 在<el-upload>组件添加一个按钮,用于触发文件选择对话框。例如:<el-button type="info" size="mini">点击上传</el-button> 8. 在methods定义handleUploadSubmit方法,该方法用于提交文件上传请求。在该方法,可以调用this.$refs['upload'].submit()来触发文件上传。例如:handleUploadSubmit() { this.$refs['upload'].submit(); } 9. 最后,需要注意的是,如果需要删除阿里云服务器上的废弃文件,可以调用client.delete方法来删除对应的文件。例如:client.delete(对应的文件名) 请注意,以上步骤仅为示例,具体实现可能会根据实际情况有所不同。同时,还需要注意处理文件上传跨域问题,可以在控制台进行相关配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值