当前位置:   article > 正文

element upload 文件缩略图模板 同时上传视频和图片并回显 组件封装_element 文件缩略图

element 文件缩略图

记录一次使用上传文件的缩略图模板并且   区分上传文件格式,手写放大显示跟删除方法  以及回显   并封装成组件,比较粗减。

照片墙

使用 list-type 属性来设置文件列表的样式。

但是用的时候上传视频时   回显图片找不到  于是改写一下 封装成组件 

在components里新建vue页面

  1. <template>
  2. <div>
  3. <el-upload
  4. :limit="limit"
  5. :action="uploadImgUrl"
  6. :file-list="UrlList"
  7. list-type="picture-card"
  8. :on-change="handleImgChange"
  9. :on-success="handleUploadSuccess"
  10. :on-exceed="handleExceed"
  11. >
  12. <i slot="default" class="el-icon-plus"></i>
  13. <div slot="file" slot-scope="{ file }">
  14. <img
  15. v-if="file.type == 1"
  16. class="el-upload-list__item-thumbnail"
  17. :src="file.url"
  18. alt=""
  19. />
  20. <video v-if="file.type == 2" :src="file.url" style="width: 100%">
  21. 您的浏览器不支持 video 标签。
  22. </video>
  23. <audio
  24. controls
  25. v-if="file.type == 3"
  26. :src="file.url"
  27. style="width: 100%"
  28. >
  29. 您的浏览器不支持该音频格式。
  30. </audio>
  31. <span class="el-upload-list__item-actions">
  32. <span
  33. class="el-upload-list__item-preview"
  34. @click="handlePictureCardPreview(file)"
  35. >
  36. <i class="el-icon-zoom-in"></i>
  37. </span>
  38. <span
  39. v-if="!disabled"
  40. class="el-upload-list__item-delete"
  41. @click="handleImgRemove(file)"
  42. >
  43. <i class="el-icon-delete"></i>
  44. </span>
  45. </span>
  46. </div>
  47. </el-upload>
  48. <el-dialog :visible.sync="dialogVisible" width="50%">
  49. <img
  50. v-if="dialogType == 1"
  51. class="el-upload-list__item-thumbnail"
  52. width="100%"
  53. :src="dialogImageUrl"
  54. alt=""
  55. />
  56. <video
  57. v-if="dialogType == 2"
  58. style="width: 100%"
  59. :src="dialogImageUrl"
  60. controls
  61. autoplay
  62. >
  63. 您的浏览器不支持 video 标签。
  64. </video>
  65. <audio controls v-if="dialogType == 3">
  66. <source :src="dialogImageUrl" />
  67. 您的浏览器不支持该音频格式。
  68. </audio>
  69. </el-dialog>
  70. </div>
  71. </template>

 方法用emit监听

  1. <script>
  2. import bus from "../../utils/bus";
  3. export default {
  4. props: {
  5. // imageUrlList: {
  6. // type: Array,
  7. // default: () => [],
  8. // },
  9. doBySelf: {
  10. type: Boolean,
  11. default() {
  12. return false;
  13. },
  14. },
  15. },
  16. data() {
  17. return {
  18. limit: 3, //限制上传数量
  19. uploadImgUrl: process.env.VUE_APP_WEB_URL + "", // 上传的图片服务器地址
  20. dialogImageUrl: null,
  21. dialogVisible: false,
  22. UrlList: [],
  23. disabled: false,
  24. dialogType: null,
  25. };
  26. },
  27. methods: {
  28. //上传
  29. handlePictureCardPreview(file) {
  30. this.dialogImageUrl = file.url;
  31. this.dialogType = file.type;
  32. this.dialogVisible = true;
  33. },
  34. // 图片改变
  35. handleImgChange(file, fileList) {
  36. bus.$emit("changeFileAfterList", fileList);
  37. this.UrlList = fileList;
  38. },
  39. // 图片移除
  40. handleImgRemove(file, fileList) {
  41. fileList = this.UrlList;
  42. let index = fileList.indexOf(file);
  43. fileList.splice(index, 1);
  44. bus.$emit("changeFileAfterList", fileList);
  45. },
  46. //图片上传成功
  47. handleUploadSuccess(response, file, fileList) {
  48. file.type = this.matchType(file.response.data.url);
  49. },
  50. handleExceed(files, fileList) {
  51. this.$message.warning(
  52. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  53. files.length + fileList.length
  54. } 个文件`
  55. );
  56. },
  57. // 根据文件名后缀区分 文件类型
  58. /*
  59. * @param: fileName - 文件名称
  60. * @param: 数据返回 1) 无后缀匹配 - false
  61. * @param: 数据返回 2) 匹配图片 - image
  62. * @param: 数据返回 8) 匹配 视频 - video
  63. * @param: 数据返回 9) 匹配 音频 - radio
  64. * @param: 数据返回 10) 其他匹配项 - other
  65. */
  66. matchType(fileName) {
  67. // 后缀获取
  68. var suffix = "";
  69. // 获取类型结果
  70. var result = "";
  71. try {
  72. var flieArr = fileName.split(".");
  73. suffix = flieArr[flieArr.length - 1];
  74. } catch (err) {
  75. suffix = "";
  76. }
  77. // fileName无后缀返回 false
  78. if (!suffix) {
  79. result = false;
  80. return result;
  81. }
  82. // 图片格式
  83. var imglist = ["png", "jpg", "jpeg", "bmp", "gif"];
  84. // 进行图片匹配
  85. result = imglist.some(function (item) {
  86. return item == suffix;
  87. });
  88. if (result) {
  89. result = "1";
  90. return result;
  91. }
  92. // 匹配 视频
  93. var videolist = ["mp4", "m2v", "mkv"];
  94. result = videolist.some(function (item) {
  95. return item == suffix;
  96. });
  97. if (result) {
  98. result = "2";
  99. return result;
  100. }
  101. // 匹配 音频
  102. var radiolist = ["mp3", "wav", "wmv", "flac"];
  103. result = radiolist.some(function (item) {
  104. return item == suffix;
  105. });
  106. if (result) {
  107. result = "3";
  108. return result;
  109. }
  110. // 其他 文件类型
  111. result = "other";
  112. return result;
  113. },
  114. },
  115. };
  116. </script>

在父页面中调用 

  1. <FileUploadEdit ref="UrlList"></FileUploadEdit>
  2. import FileUploadEdit from "@/components/FileUploadEdit";
  3. components: {
  4. FileUploadEdit,
  5. },

父页面监听数据变化 写在created()方法里,

  1. bus.$on("changeFileList", (fileList) => {
  2. this.ruleForm.imageUrlList = [];
  3. this.ruleForm.videoUrlList = [];
  4. this.ruleForm.musicUrlList = [];
  5. if (fileList.length > 0) {
  6. fileList.map((item) => {
  7. if (item.response) {
  8. if (fileUploadIf(item.response.data.url) == 1) {
  9. this.ruleForm.imageUrlList.push(item.response.data.url);
  10. } else if (fileUploadIf(item.response.data.url) == 2) {
  11. this.ruleForm.videoUrlList.push(item.response.data.url);
  12. } else if (fileUploadIf(item.response.data.url) == 3) {
  13. this.ruleForm.musicUrlList.push(item.response.data.url);
  14. }
  15. }
  16. });
  17. }
  18. });

以上是上传文件改写的封装。

/utils/bus.js  自己新建一下

  1. // bus.js
  2. import Vue from 'vue';
  3. // 使用 Event Bus
  4. const bus = new Vue;
  5. export default bus;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/477354
推荐阅读
相关标签
  

闽ICP备14008679号