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);
}
