elementUi中的el-upload上传文件后换封面功能及预览大图结合el-image开发

本文介绍如何在El-Upload组件中,实现图片上传显示封面、PDF和其他文件格式使用默认封面,并结合el-image-viewer预览不同文件格式。通过自定义字段管理实际文件路径和封面URL,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、el-upload上传后换封面
原始效果如下:
(上传图片时正常显示图片封面,但是上传其他格式文件时,没有封面,只有一个小的缩略默认图片)
在这里插入图片描述

预期效果如下:
(上传图片—>显示图片、上传pdf文件—>pdf封面图片、其他格式文件采用相同方法)
在这里插入图片描述
原因讲解:由于el-upload展示封面时根据file-list参数中的url字段来进行展示的,所以我们在处理数据的时候我们将其中的url替换成自己想要的封面图片,然后将实际的文件路径存放到另一个自定义字段里面就好,这里我的自定义字段为“realurl“

代码展示:
1、页面代码:

           <el-upload
                action="123"
                :http-request="uploadmany"
                 list-type="picture-card"
                :file-list="fileList"
                >
             </el-upload>

2、组件相关函数实现代码

  uploadmany(file) {
      var formData = new FormData();//这是由于接口数据类型规定,可以根据自己所需进行更改
      formData.append("file", file.file);
      this.$axios
        .post("/carInfo/uploadPhoto", formData, {
          headers: { "Content-Type": "multipart/form-data" },
        })
        .then((res) => {
          if (res.data.code == 200) {
            console.log(res);
            var last = res.data.result.substring(res.data.result.lastIndexOf("."));//将接口中返回的各文件链接进行截取,来判断属于什么格式文件
            if (last == ".pdf") {
              this.fileList.push({
                url: "https://img0.baidu.com/it/u=3644622474,3688361323&fm=26&fmt=auto&gp=0.jpg",//pdf封面图片
                realurl: res.data.result,//接口返回的pdf文件链接
              });
            } else if (last == ".png" || last == ".jpg" || last == ".jpeg" || last == '.jfif') {
              this.fileList.push({
                url: res.data.result,
                realurl: res.data.result,
              });
            } else if (last == ".doc" || last == ".docx") {
              this.fileList.push({
                url: 'https://img1.baidu.com/it/u=1714136260,3766911961&fm=26&fmt=auto&gp=0.jpg',
                realurl: res.data.result,
              });
            } else if (last == '.xls' || last == '.xlsx') {
              this.fileList.push({
                url: 'https://img1.baidu.com/it/u=1123362811,2189997153&fm=26&fmt=auto&gp=0.jpg',
                realurl: res.data.result,
              });
            }
          } else {
            this.$message({
              message: res.data.message,
              type: "error",
              offset: 70,
            });
          }
        });
    },

二、上传后点击预览大图(与el-image组件结合开发)
效果图如下:
在这里插入图片描述
点击图片中的+号之后展示如下
在这里插入图片描述
可点击图片中的红框内进行相关展示
代码如下:

               <el-upload
                  action="123"
                  :on-preview="handlePictureCardPreview"//预览功能
                  :disabled="readonly"//只读
                  :file-list="fileList"
                  :class="{ disabled: true, 'avatar-uploader': true }"//只读下,关闭固有的上传框
                > 
                </el-upload>

由于el-image需要进一步点击才能打开大图,我们需要跳过点击这一步,直接展示大图,所以采用el-image的底层组件’el-image-viewer’,
代码如下:
1、引入组件(el-image-viewer是elementui中原有组件,不需要自定义,直接引入就行)

components: {
    'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
  },

2、在vue的template中使用组件

 <el-image-viewer
        v-if="dialogVisible"
        :url-list="[dialogImageUrl]"
        :on-close="closeViewer"//关闭大图时触发
      />

3、使用el-uploader的原有预览功能获取文件链接
代码如下:

handlePictureCardPreview(file) {
      var last = file.realurl.substring(file.realurl.lastIndexOf("."));
      if (
        last == ".png" ||
        last == ".jpg" ||
        last == ".jpeg" ||
        last == ".jfif"
      ) {
        this.dialogImageUrl = file.realurl;
        this.dialogVisible = true;
      } else if (last == ".pdf") {
        window.open(file.realurl);
      } else {
        window.open(
          "https://view.officeapps.live.com/op/view.aspx?src=" + file.realurl//微软提供的开源接口,打开word,excel等文件
        );
      }
    },
  // 关闭查看器
    closeViewer() {
      this.dialogVisible = false
    },

解决方案就是这样了,有什么不足,还请各位海涵并指正,感谢!!!

### 实现多图片上传功能Vue3 和 Element Plus 中,`el-upload` 组件支持多种配置选项以满足不同的需求。为了实现多图片上传功能,可以通过调整 `limit`、`multiple` 等属性以及监听事件来完成。 以下是基于提供的引用内容和官方文档的一个完整示例: #### HTML 结构 ```html <template> <div> <!-- 使用 el-upload --> <el-upload action="https://jsonplaceholder.typicode.com/posts/" multiple :limit="3" list-type="picture-card" :on-exceed="handleExceed" :file-list="fileList" :auto-upload="false" :before-upload="beforeUpload"> <el-icon><Plus /></el-icon> </el-upload> <el-button style="margin-top: 20px;" @click="submitUpload">上传</el-button> </div> </template> ``` #### JavaScript 部分 ```javascript <script setup> import { ref } from 'vue'; import { ElMessage } from 'element-plus'; const fileList = ref([]); // 文件列表 // 超过限制时的回调函数 const handleExceed = () => { ElMessage.warning('最多只能上传三张图片'); }; // 自定义校验逻辑 const beforeUpload = (file) => { const isJPGorPNG = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJPGorPNG) { ElMessage.error('仅允许上传 JPG 或 PNG 格式的图片!'); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { ElMessage.error('图片大小不能超过 2MB!'); } return isJPGorPNG && isLt2M; }; // 提交上传按钮点击事件 const submitUpload = () => { console.log(fileList.value, '待上传文件列表'); // 可在此处调用自定义方法提交到服务器 }; </script> ``` --- #### 关键参数说明 - **`action`**: 设置上传的目标 URL 地址[^1]。 - **`multiple`**: 是否允许多选文件,默认为 `false`。将其设为 `true` 即可开启多图上传模式。 - **`list-type`**: 图片上传组件展示样式,常见的有 `"text"`(默认)、`"picture"` 和 `"picture-card"`。 - **`:limit`**: 限定最大上传数量,超出会触发 `exceed` 方法。 - **`:on-exceed`**: 当上传文件数超限时触发的方法。 - **`:before-upload`**: 在上传前对文件进行验证的操作钩子[^2]。 - **`:auto-upload`**: 控制是否自动上传文件。如果设置为 `false`,则需要手动触发表单提交操作。 --- #### 注意事项 当 `auto-upload` 设为 `false` 时,`before-upload` 不会被触发。因此,在这种情况下,建议将所有的校验逻辑放在其他地方处理,比如通过表单提交的方式统一管理。 另外,实际项目中可能还需要对接 OSS 接口或其他存储服务。此时可以参考引用中的代码片段[^3],动态生成上传地址并绑定成功后的回调函数。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值