Taro上传formdata文件,兼容微信小程序

Taro上传formdata文件,兼容微信小程序

开源

个人开源的leno-admin后台管理项目,前端技术栈:reactHooksant-design;后端技术栈:koamysqlredis,整个项目包含web端electron客户端mob移动端template基础模板,能够满足你快速开发一整套后台管理项目;如果你觉得不错,就为作者点个✨star✨吧,你的支持就是对我最大的鼓励;

演示地址

文档地址

源码github地址

原由

因为微信小程序默认是不支持formdata的文件格式,所以之前项目中的图片上传功能就没办法通用,因为之前项目是将图片文件转为formdata的格式,再上传到后端;但是又不能为了微信小程序一端就去修改后端接口,但是新增个后端接口的话又嫌弃麻烦;

最后经历多方查找与实验,发现了taro里面提供了uploadFile这个函数可以完美解决这个问题;在图片提交的时候,对是哪一端用process.env.TARO_ENV来进行判断,分别执行不同的提交文件逻辑,h5端的话就使用原来web端的代码,将文件转为formdata格式,提交给到后端接口;如果为微信小程序的格式的话,则就使用taro里面的uploadFile,直接请求后端接口,不走统一封装的请求函数,需要注意的是,需要将请求头中的内容类型设置为multipart/form-data才有效,然后name就是和web端的append里面设置文件名是一样的,需要记得的是,因为是不经过统一封装的请求函数,所以需要单独配置token

代码

tsx 复制代码
  const submitFn = async () => {
    if (files.length > 0) {
      try {
        if (process.env.TARO_ENV === "h5") {
          const fd = new FormData();
          fd.append("avatar", (files[0] as any).file.originalFileObj);
          await uploadAvatarAPI(fd);
          avatarSuccess();
        }
        if (process.env.TARO_ENV === "weapp") {
          const img = (files[0] as any).url; // 此处将文件临时路径存储到img中
          Taro.uploadFile({
            url: process.env.BASE_ENV + "/user/profile/avatar",
            filePath: img, // 此处防止文件的路径
            name: "avatar", // 后端根据key拿取存储的文件
            header: {
              "Content-Type": "multipart/form-data", // 此处需要设置为"multipart/form-data"格式
              Authorization: `Bearer ${token}`,
            },
            success: function () {
              avatarSuccess();
            },
          });
        }
      } catch (error) {}

      async function avatarSuccess() {
        const res = await getUserAPI();
        setUserInfo(res.data.result);
        Taro.showToast({ title: "图片修改成功", icon: "success" });
        setTimeout(() => {
          Taro.switchTab({
            url: "/pages/main/my/index",
          });
        }, 300);
      }
    }
  };

结语

在使用taro中遇到最多的坑就是对多端情况的兼容,每端的定义都有些许不同,还有就是taro3本身存在些小bug,我个人就遇到了一次微信小程序端dev运行后,临时文件的导入路径不对,导致项目无法加载;

如果需要查看源码的,可以到上面的开源项目地址下载查看,leno-admin是完全开源的项目,并且包括web端、electron端、移动端;

相关推荐
叫我阿柒啊6 小时前
从Java全栈到前端框架:一场真实的技术面试对话
java·vue.js·spring boot·微服务·typescript·前端开发·后端开发
GISer_Jing10 小时前
Taro跨端开发实战:JX首页实现_Trae SOLO构建
前端·javascript·aigc·taro
老前端的功夫11 小时前
TypeScript 类型守卫:从编译原理到高级模式
前端·javascript·架构·typescript
ttod_qzstudio11 小时前
备忘录之事件监听器绑定陷阱:为什么 .bind(this) 会移除失败?
javascript·typescript·内存泄漏·事件监听
qq_124987075313 小时前
基于微信小程序的校园跑腿系统的设计与实现(源码+论文+部署+安装)
spring boot·微信小程序·小程序·毕业设计·计算机毕业设计
大大花猫15 小时前
我用AI写了个小程序,却被人说没有底线…
前端·微信小程序·交互设计
GISer_Jing16 小时前
Taro打造电商项目实战
前端·javascript·人工智能·aigc·taro
Hao_Harrision17 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨ | DoubleClickHeart(双击爱心)
前端·typescript·react·tailwindcss·vite7
计算机毕设指导617 小时前
基于微信小程序的设备报修系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
qq_124987075317 小时前
悦读圈图书共享微信小程序(源码+论文+部署+安装)
spring boot·后端·微信小程序·小程序·毕业设计·计算机毕业设计