vue3+uniapp 上传附件的操作代码

 更新时间:2024年01月11日 16:58:21   作者:tingkeiii  
uni-file-picker搭配uni.uploadFile在使用问题上踩了不少坑,我至今还是没办法在不改uniapp源码基础上实现限制重复文件的上传,这篇文章介绍vue3+uniapp 上传附件的操作代码,感兴趣的朋友一起看看吧

uni-file-picker搭配uni.uploadFile在使用问题上踩了不少坑,我至今还是没办法在不改uniapp源码基础上实现限制重复文件的上传。因为始终怎么限制,uni-file-picker绑定的v-model的值fileList,好像只要上传了文件展示就一定会回显那一个附件。还有一个问题,就是上传的进度条并不能正常工作。直接css隐藏算了眼不见心不烦

多次试图驯服该组件,发现如果要把上传好的文件列表同步给父组件,就不要去传组件绑定的value值,因为这会出问题,把这个变量当做单纯展示的作用就好了,父子组件的数据传输,可以用双向绑定,文件的增删改都操作这个双向绑定的数据。

子组件:封装的文件上传

c-upload.vue

<template>
  <uni-file-picker
      v-model="fileList"
      :auto-upload="false"
      file-mediatype="all"
      mode="grid"
      @delete="delFile"
      @select="select"
  >
    <text class="iconfont icon-zengjiatianjiajiahao"></text>
  </uni-file-picker>
</template>
<script setup>
import {ref, reactive, watch} from "vue";
const props = defineProps({
  appendixEntityList: {default: []},
});
const emit = defineEmits(["update:appendixEntityList"]);
let fileList = ref([]);
// 选择上传触发函数
const select = (e) => {
  // 根据所选图片的个数,多次调用上传函数
  let promises = [];
  for (let i = 0; i < e.tempFilePaths.length; i++) {
    const promise = uploadFiles(e.tempFilePaths, i);
    promises.push(promise);
  }
  Promise.all(promises).then(() => {
  });
};
// 上传函数
const uploadFiles = async (tempFilePaths, i) => {
  await uni.uploadFile({
    url: '/api/xxx/xxxx/xxxx', //后端用于处理图片并返回图片地址的接口
    filePath: tempFilePaths[i],
    name: "file",
    header: {
      Authorization: "Bearer " + uni.getStorageSync("token") || "",
      ContentType: "application/x-www-form-urlencoded",
      skipToken: true,
    },
    success: (res) => {
      let v = JSON.parse(res.data); //返回的是字符串,需要转成对象格式
      if (v.code == 200) {
        props.appendixEntityList.push({
          appendixId: v.data.id,
          appendixOriginal: v.data.original,
          appendixUrl: v.data.attachUrl,
        });
        emit("update:appendixEntityList", props.appendixEntityList);
      }
    },
    fail: () => {
      console.log("err");
    },
  });
};
//文件列表回显
const fileListEcho = () => {
  if (props.appendixEntityList.length > 0) {
    fileList.value = [];
    props.appendixEntityList?.forEach((v) => {
      //改成官方文档要求的格式。才能回显附件
      fileList.value.push({
        name: v?.appendixOriginal,
        extname: v?.appendixType,
        url: v?.appendixUrl,
      });
    });
  }
};
// 移出图片函数
const delFile = async (val) => {
  //在提交数组中删除那个被删的文件
  props.appendixEntityList.some((v, i) => {
    if (v.appendixOriginal === val.tempFile.name) {
      props.appendixEntityList.splice(i, 1);
      emit("update:appendixEntityList", props.appendixEntityList);
      return true;
    }
  });
};
watch(
    () => props.appendixEntityList,
    (newVal) => {
      fileListEcho();
    },
);
</script>
<style lang="scss" scoped>
.icon-zengjiatianjiajiahao {
  font-size: 42rpx;
  color: #a2a3a5;
  position: absolute;
  right: 0;
  top: -50rpx;
}
</style>

父组件:

    <!--        上传-->
        <c-upload
          ref="uploadRef"
          v-model:appendixEntityList="form.appendixEntityList"
        ></c-upload>

到此这篇关于vue3+uniapp 上传附件的文章就介绍到这了,更多相关vue3+uniapp 上传附件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2.0实现检测无用的代码并删除

    vue2.0实现检测无用的代码并删除

    这篇文章主要介绍了vue2.0实现检测无用的代码并删除方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Vue.js中的extend绑定节点并显示的方法

    Vue.js中的extend绑定节点并显示的方法

    在本篇内容里小编给大家整理了关于Vue.js中的extend绑定节点并显示的方法以及相关知识点,需要的朋友们学习下。
    2019-06-06
  • Vue3使用Proxy构建高效响应式数据的示例代码

    Vue3使用Proxy构建高效响应式数据的示例代码

    在 Vue 3 中,Proxy 主要用于 拦截对象的基本操作,包括 属性读取(get)、修改(set)、删除(deleteProperty) 等,本文给大家介绍了Vue3使用Proxy构建高效响应式数据的操作教程,需要的朋友可以参考下
    2025-03-03
  • 详解解决Vue相同路由参数不同不会刷新的问题

    详解解决Vue相同路由参数不同不会刷新的问题

    这篇文章主要介绍了详解解决Vue相同路由参数不同不会刷新的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • vuex的使用和简易实现

    vuex的使用和简易实现

    这篇文章主要介绍了vuex的使用和简易实现,帮助大家更好的理解和使用vuex,感兴趣的朋友可以了解下
    2021-01-01
  • npm安装vue@cli报错的简单处理方式

    npm安装vue@cli报错的简单处理方式

    最近工作中遇到了报错,现在将解决的办法分享给大家,下面这篇文章主要给大家介绍了关于npm安装vue@cli报错的简单处理方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 深入探讨Vue 3中的组合式函数编程方式

    深入探讨Vue 3中的组合式函数编程方式

    Vue 3中引入了组合式函数编程方式,可以更好地实现代码的复用和可维护性。通过定义可组合的函数,可以将组件的逻辑和状态进行拆分和组合,实现更灵活的代码组织方式。同时,组合式函数也支持响应式数据和生命周期钩子函数,更加贴近Vue开发的实际场景
    2023-05-05
  • vue3动态路由addRoute实例详解

    vue3动态路由addRoute实例详解

    这篇文章主要介绍了vue3动态路由addRoute的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • vue 如何获取视频第一帧

    vue 如何获取视频第一帧

    这篇文章主要介绍了vue 如何获取视频第一帧,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue2.0多条件搜索组件使用详解

    vue2.0多条件搜索组件使用详解

    这篇文章主要为大家详细介绍了vue2.0多条件搜索组件的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论