vue 使用js实现批量上传图片功能并回显图片

关于批量上传图片功能,可以通过js直接实现

核心功能实现:

在Vue组件的data函数中定义一个数组来存储选中的文件,并在methods中添加一个方法来处理文件选择事件。

methods: {
updateImgs(fieldname) {
      const inputFile = document.createElement('input')
      inputFile.type = 'file'
      inputFile.accept = 'image/*' // 只接受图片文件
      inputFile.multiple = true // 允许选择多个文件

      inputFile.click() // 触发文件选择对话框

      inputFile.onchange = async (e) => {
        const files = e.target.files // 获取所有选中的文件
        if (!files.length) return // 如果没有选中文件,直接返回

        // 遍历每个文件
        for (let i = 0; i < files.length; i++) {
          const file = files[i]
          const fileSizeMB = file.size / (1024 * 1024) // 转换为MB

          if (fileSizeMB > 2) {
            // 文件大小超过2MB,显示提示信息
            this.$message.error(`文件 ${file.name} 大小不能超过2MB`)
            continue // 跳过当前文件,继续检查下一个文件
          }

          // 使用 FormData 来构建上传的数据
          const formData = new FormData()
          formData.append('file', file)

          try {
            const { data: res } = await uploadFile(formData) // 你的配置后的上传图片接口
             //根据接口返回存图片的url 例this.xxx = res,之后应用到你的新增/编辑接口
             this.reportData.projimplement.imglist.push({
                  url: res.data.filePath,
                  description: file.name
                })
          } catch (error) {}
        }
      }
    },
    getFullImageUrl(relativePath) {
      // 结合服务器前缀和相对路径
      return `${this.serverPrefix}${relativePath}`
    },
    getPreviewList(imgList) {
    // 显示图片组
      return imgList.map((item) => this.getFullImageUrl(item.url))// 你的结构
    }
  }

实现了以下功能:

0.创建文件输入元素:使用document.createElement创建一个新的元素,类型设置为file,并且设置了accept属性来限制用户只能选择图片文件,同时设置了multiple属性允许用户选择多个文件。
1.触发文件选择对话框:通过调用inputFile.click()方法,模拟用户点击文件输入框,从而触发操作系统的文件选择对话框。
2.处理文件选择:通过监听inputFile元素的onchange事件,当用户选择了文件后,事件处理函数会被触发。
3.文件大小检查:在事件处理函数中,首先获取所有选中的文件,然后遍历这些文件,检查每个文件的大小是否超过2MB。如果文件大小超标,则显示错误提示并跳过该文件。
4.构建FormData:对于每个符合大小要求的文件,使用FormData对象来构建一个表单数据对象,并将文件附加到这个对象中。
5.异步上传文件:使用async/await语法,调用uploadFile函数(这个函数没有在代码中定义,可能是组件的另一个方法或者外部服务)来异步上传文件。uploadFile函数接收一个FormData对象作为参数,并返回一个包含上传结果的Promise。
6.处理上传结果:如果上传成功(res.success为true),则根据传入的fieldname参数,将文件路径添加到组件的相应数据属性中。之后显示成功消息。
7.错误处理:如果上传过程中出现错误,catch块会捕获异常,但当前的实现中并没有做任何错误处理,只是简单地忽略了错误。

HTML部分

<div style="position: relative">
            <el-button class="upimg_but" type="primary" size="small" @click="updateImgs"
              >上传</el-button
            >
            <div class="img-block">
              <div class="img-box" v-for="(item, index) in reportData.projimplement.imglist" :key="index">
                <el-tooltip effect="dark" :content="item.description" placement="bottom">
                  <el-image
                    style="width: 150px; height: 150px"
                    :src="getFullImageUrl(item.url)"
                    fit="contain"
                    lazy
                    :preview-src-list="getPreviewList(reportData.projimplement.imglist)"
                  ></el-image>
                </el-tooltip>
                <i class="el-icon-delete" style="cursor: pointer" @click="deleteImg(index)"></i>
              </div>
            </div>
          </div>

CSS部分

.img-block {
  padding-top: 30px;
  max-height: 320px;
  display: flex;
  flex-wrap: wrap;
  overflow-y: auto;

  &::-webkit-scrollbar-track-piece {
    background: #e4e4e4;
  }

  &::-webkit-scrollbar {
    width: 4px;
    height: 8px;
  }

  &::-webkit-scrollbar-thumb {
    background: #c2c2c2;
    border-radius: 20px;
  }

  .img-box {
    width: 33%;
    text-align: center;
    margin: 8px 0;
  }
}

效果预览

图片上传

ps:请注意,上述代码只是一个示例,实际应用中你可能需要根据具体需求调整样式、上传逻辑和错误处理等。此外,确保后端API能够正确处理批量上传的文件。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用element-plus、ts和vue3实现上传多张图片回显,可以按照以下步骤操作: 1. 首先,安装element-plus和vue3的相关依赖。可以使用npm或yarn安装element-plus和vue3的依赖包。 2. 在项目中创建一个上传组件,可以使用element-plus提供的el-upload组件实现。在组件中,引入和注册el-upload组件。 3. 组件中,声明一个data属性,用于存储图片文件和回显图片列表。可以使用ref或reactive创建响应式数据。 4. 在template模板中,使用el-upload组件,设置一些必要的属性,如action、listType和multiple等。通过action属性指定上传的地址,listType属性设置为"picture-card"以展示上传的图片,并且通过multiple属性支持上传多张图片。 5. 设置el-upload组件的onSuccess和beforeRemove事件,用于在成功上传图片或删除图片时触发相应的逻辑。在onSuccess事件中,将上传的文件添加到data属性中的图片文件列表中;在beforeRemove事件中,通过索引将要删除的图片从data属性中的图片文件列表中移除。 6. 在组件中,使用v-for指令遍历图片文件列表,并使用el-image组件展示回显图片。el-image组件是element-plus提供的用于展示图片的组件。 7. 最后,在应用的父组件中,使用刚刚创建的上传组件。使用v-model指令绑定父组件中的数据,以获取上传成功后的图片文件。 通过以上步骤,就可以实现使用element-plus、ts和vue3上传多张图片回显功能

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉柚ˇ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值