美文网首页
图片上传-总-自定义上传

图片上传-总-自定义上传

作者: jesse28 | 来源:发表于2023-04-09 13:44 被阅读0次

父组件使用方方

 <el-row>
          <el-col>
                <el-form-item label="上传视频:">
                    <!-- 上传视频组件 :file-list="fileList"这个用作编辑回显用的-->
                    <video-upload1 fileType="serviceAnnex" @successHandleVideo="successHandleVideo" :file-list="editForm.videoFileIds" />
                  </el-form-item>
            </el-col>
   </el-row>

  //视频上传回调
    successHandleVideo(e) {
      this.editForm.videoFileIds = e.join(",");
    }
<template>
  <div class="video-container">
    <el-upload ref="upload" class="avatar-uploader" :http-request="handleRequset" :show-file-list="false" :action="'#'" :data="uploadFileData(data)" :headers="setHeader(headers)" :before-upload="beforeVideoUpload">
      <div class="video-demo">
        <el-button size="small" type="primary">点击上传视频</el-button>
      </div>
    </el-upload>
    <div class="arrayOrder">
      <div class="video-item" v-for="(item,index) in fileListArr" :key="index">
        <video class="video-src" :src="item.url" controls="controls">
        </video>
        <i slot="trigger" v-if="fileListArr" @click="onRemove(item)" class="video-close el-icon-close"></i>
      </div>
      <el-progress style="margin-left:10px;" v-if="isProgress" type="circle" :percentage='percentageValue'></el-progress>
    </div>

  </div>
</template>
<script>
import {
  uploadFileURL,
  openFileApi,
  uploadFileData,
  setHeader,
  uploadFileApi,
} from "../api/file";
import { resetRouter } from "../plugins/router";
export default {
  name: "LjUpload",
  props: {
    data: {
      default() {
        return {};
      },
    },
    fileType: {
      type: String,
      default: "",
    },
    headers: {
      default() {
        return {};
      },
    },
    fileList: {},
  },
  data() {
    return {
      isProgress: false,
      percentageValue: 0,
      flag: true,
      videoFlag: false,
      dialogImageUrl: "",
      dialogVisible: false,
      fileListArr: [], //用来存放视频
      fileListString: [], //存视频id数组
      uploadFileURL: uploadFileURL,
      uploadFileData: uploadFileData,
      setHeader: setHeader,
      file: null,
    };
  },
  mounted() {
    this.flag = true;
  },
  watch: {
    fileList: {
      immediate: true,
      deep: true,
      handler(newValue, oldValue) {
        if (!this.flag) {
          return;
        }
        console.log("new", newValue);
        console.log("数组", this.fileListArr);
        let copynewValue = newValue; //拷贝一份
        console.log("copynewValue", copynewValue);
        if (newValue) {
          this.fileListString = copynewValue.split(","); //转化为数组
          console.log("fileListString", this.fileListString);
          copynewValue.split(",").forEach((item) => {
            this.fileListArr.push({ url: openFileApi + item });
          });
        }
        if (this.fileListArr.length) {
          this.flag = false;
        }
      },
    },
  },
  methods: {
    // 自定义上传
    handleRequset(file) {
      this.percentageValue = 0;
      this.isProgress = true;
      uploadFileApi(
        "serviceAnnex",
        0,
        { file: [file.file] },
        this.progress
      ).then((res) => {
        this.flag = false; //为了不让他触发watch
        console.log("自定义上传视频成功", res);
        // 上传成功后调用uploadSucess

        this.percentageValue = 100;
        setTimeout(() => {
          this.isProgress = false;
        }, 500);
        setTimeout(() => {
          this.uploadSucess(res);
        }, 700);
      });
    },
    // 获取进度条百分之多少
    progress(data) {
      console.log("视频组件data", data);
      let result = parseInt((data.loaded / data.total) * 100);
      this.percentageValue = result <= 84 ? result : 84;
    },

    //uploadSucess文件上传成功后走的函数
    uploadSucess(res) {
      this.flag = false; //为了不让他触发watch
      this.fileListString.push(res.fileIdList[0]);
      console.log("上传fileListString", this.fileListString);
      let temp = [];
      this.fileListString.forEach((item) => {
        temp.push({ url: openFileApi + item, name: "" });
      });
      this.fileListArr = temp;
      console.log("视频格式fileListArr", this.fileListArr);
      this.$emit("successHandleVideo", this.fileListString);
    },

    //限制用户上传格式
    beforeVideoUpload(file) {
      var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
      const extension =
        testmsg === "mp4" ||
        testmsg === "ogg" ||
        testmsg === "flv" ||
        testmsg === "avi" ||
        testmsg === "wmv" ||
        testmsg === "rmvb";
      if (!extension) {
        this.$message.error("请上传视频 mp4 | ogg | flv 格式!");
        return false;
      }
      return extension;
    }, //beforeVideoUpload
    onRemove(item) {
      console.log(item);
      this.flag = false; //为了不让他触发watch
      let clearId = item.url;
      this.fileListArr.forEach((item1, index) => {
        if (item1.url == clearId) {
          this.fileListArr.splice(index, 1);
          this.fileListString.splice(index, 1);
        }
      });
      console.log("移除的视频", this.fileListArr);
      this.$emit("successHandleVideo", this.fileListString);
    },
  },
};
</script>

<style scoped  lang="less">
.upload-input {
  display: none;
}

.video-demo {
  display: flex;
  align-items: flex-start;
}
.arrayOrder {
  width: 727px;
  display: flex;
  margin-left: -30px;
  flex-wrap: wrap;
}
.video-item {
  position: relative;
  left: 0;
  .video-src {
    width: 150px;
    height: 100px;
    margin-left: 30px;
  }
  .video-close {
    color: red;
    position: absolute;
    top: -6px;
    width: 20px;
    height: 20px;
    display: inline-block;
    right: -15px;
    z-index: 99999;
  }
}
/deep/ .el-progress-circle {
  width: 100px !important;
  height: 100px !important;
}
</style>


相关文章

网友评论

      本文标题:图片上传-总-自定义上传

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