当前位置: 首页 > news >正文

uni-app小程序往飞书多维表格写入内容(包含图片)

1、首先,要去飞书开放平台申请一个应用

https://open.feishu.cn/app?lang=zh-CN,

创建完成后,

到权限管理菜单配置这些权限,然后记着appId和appSecret

2、下面是代码部分

// 飞书开放平台相关配置
const FEISHU_CONFIG = {
  appId: 'cli_a865d9f7b2661013',  //你的飞书应用appId
  appSecret: 'xxxxxxxx',  //你的飞书应用appSecret
  sheetToken: 'OkgmbPc8nagVQFsJL01cfMpbnAb', //你的共享表格token   多维表格url(base后面的):https://jcnl0y81wjmw.feishu.cn/base/OkgmbPc8nagVQFsJL01cfMpbnAb?table=tblkin4uyMdJybzy&view=vewQwiI2gE
  tableId: 'tblkin4uyMdJybzy' //你的表格Id,table=后面的,注意不要包含&view=这些
}

// 获取飞书API访问令牌
const getAccessToken = async () => {
  try {
    const res = await uni.request({
      url: 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/',
      method: 'POST',
      data: {
        app_id: FEISHU_CONFIG.appId,
        app_secret: FEISHU_CONFIG.appSecret
      },
      header: {
        'Content-Type': 'application/json'
      }
    })
     console.log('res===',res)
    if (res?.data?.msg == 'ok' && res.data.code === 0) {
      return res.data.tenant_access_token
    } else {
      console.error('获取飞书token失败:', res)
      throw new Error('获取飞书访问令牌失败')
    }
  } catch (error) {
    console.error('获取飞书token出错:', error)
    throw error
  }
}

/**
 * 向飞书表格追加行数据
 * @param {Array} rows 要追加的行数据,每个元素是一个对象,键为列名,值为单元格内容
 * @returns {Promise} 返回操作结果
 */
const appendRowsToSheet = async(data) => {
  try {
    // 获取访问令牌
          const accessToken = await getAccessToken();
         
          // 调用飞书API写入数据
          const res = await uni.request({
            url: `https://open.feishu.cn/open-apis/bitable/v1/apps/${FEISHU_CONFIG.sheetToken}/tables/${FEISHU_CONFIG.tableId}/records`,
            method: 'POST',
            header: {
              'Content-Type': 'application/json',
              'Authorization': `Bearer ${accessToken}`
            },
             data: {
                    fields: data
                  }
          });
    
    if (res[1].statusCode === 200 && res[1].data.code === 0) {
        console.log('向飞书表格追加数据成功:')
      return {
        success: true,
        data: res[1].data
      }
    } else {
      console.error('向飞书表格追加数据失败:', res[1].data)
      return {
        success: false,
        error: res[1].data
      }
    }
  } catch (error) {
    console.error('向飞书表格追加数据出错:', error)
    return {
      success: false,
      error: error.message
    }
  }
}
// 上传图片到飞书,返回图片链接
 const uploadImageToFeishu = async(filePath,size)=> {
    try {
      const token = await getAccessToken();
      // 先上传文件到飞书
      const uploadResponse = await uni.uploadFile({
        url: `https://open.feishu.cn/open-apis/drive/v1/medias/upload_all`,
        filePath: filePath,
        name: "file",
        header: {
          'Authorization': `Bearer ${token}`,
          'Content-Type': 'multipart/form-data'
        },
        formData: {
          'file_name': `image_${Date.now()}.jpg`,
           parent_type: "bitable_image", // 固定值:上传到云空间
            parent_node: FEISHU_CONFIG.sheetToken, // 父目录ID:root=根目录,可替换为自定义文件夹ID
          'size':size
        }
      })

      const result = JSON.parse(uploadResponse.data)
      if (result.code === 0) {
        return result.data.file_token
      } else {
        throw new Error('图片上传失败: ' + result.msg)
      }
    } catch (error) {
      console.error('上传图片错误:', error)
      throw error
    }
  }
export {appendRowsToSheet,uploadImageToFeishu}

页面引用代码

import {appendRowsToSheet,uploadImageToFeishu} from '@/utils/feishuSheet.ts';

const uploadImageFile = ()=>{
        return new Promise((resolve)=>{
            uni.chooseImage({
                count: 1, // 选择一张图片 不设置可以选多张
                sizeType: ["original", "compressed"], // 可以选择原图或压缩图          
                async success(res) {                            
                    const formdata = res.tempFiles;
                    let path = formdata[0].path;                        
                    uni.getFileInfo({
                          filePath: path,
                          success:async (res) => {
                            // 存储文件大小(字节)
                            const url = await uploadImageToFeishu(path,res.size);
                            console.log('url===',url);
                            resolve(url);
                          },                         
                    });                                                                                    
                }
            });    
        })
    }

const finishMainence = async()=>{
       const imageUrl:any = await uploadImageFile();
        fields = {
            '设备ID':'1111', //对应多维表格里面文本字段
           '客户名称':'张三',
            '新设备图片':[   //对应多维表格里面 附件字段
                  {
                    file_token: imageUrl,
                    // 可选:设置图片显示名称
                    name: `image_${Date.now()}`
                  }
            ],
        }
        const res = await appendRowsToSheet(fields);
    }

http://www.dtcms.com/a/519580.html

相关文章:

  • 【uniapp】App平台展示pdf文件
  • Jenkins Pipeline 中使用 GitLab Webhook 触发任务执行
  • 【课堂笔记】概率论-2
  • 自建企业级演示中心:不用租Office,PPTist+cpolar方案实测
  • ubuntu22+postgresql18启动报错
  • 如何做好电商网站平面设计wordpress接入翼支付宝
  • 网站 建设初步下载安装wordpress 主题
  • numpy 广播详解(Broadcasting)​​
  • 【数据结构】 [特殊字符] 顺序表详解——数据结构的第一块基石
  • 企业级安全运营中心(SOC)建设实战:从威胁检测到自动化响应
  • 分布式存储Ceph与OpenStack、RAID的关系
  • “五金件自动化上下料”革新:人形机器人如何重塑柔性制造
  • 多线程六脉神剑第二剑:监视器锁 (Monitor)
  • 飞书多维表格自动化做音视频文案提取,打造素材库工作流,1分钟学会
  • 基于主题聚类的聊天数据压缩与智能检索系统
  • 结构健康自动化监测在云端看数据变化,比人工更及时精准,优缺点分析?
  • 做夹具需要知道的几个网站服装页面设计的网站
  • 分享影视资源的网站怎么做网站字头优化
  • 照明回路配线-批量测量超实用
  • Python 条件判断机制本质
  • 关于spiderdemo第二题的奇思妙想
  • Python处理指定目录下文件分析操作体系化总结
  • k8s部署自动化工具jenkins
  • YOLOv5 目标检测算法详解(一)
  • No040:陪伴的艺术——当DeepSeek学会在时光中温柔在场
  • 6-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸侦查客户端指纹
  • 苏州企业网站设计企业phpstudy如何建设网站
  • 仿站网站域名网站建设数据库实验心得
  • 怎么看电脑的主板BIOS型号
  • 广东省高校质量工程建设网站管理登陆网站开发软件