🎉️ 🎉️ 喜讯喜讯,明道云的附件支持文件 Base64 加密后上传了,公有云版本 6.4.1 已在上周四发布了,具体信息及操作如下。
工作表 API 附件提交格式
{
"controlId": "5f4478b1f5071d0001481f97", //附件控件id
"value":"https://media.mingdao.com/19.png",//外部文件链接,多个用“,”逗号隔开
"editType":1 , //数据更新类型, 0=覆盖 ,1=新增(默认0:覆盖,新建记录可不传该参数)
"valueType":2,//提交值类型,1 = 外部文件链接,2= 文件流字节编码 base64格式 字符串 (默认 1 ,为1时 外部链接放在value参数中,为2时 文件流base64信息放在 controlFiles参数中 )
"controlFiles":[{ // base64格式 文件信息
"baseFile":"QABAAQQQAAG9nCwAAAA==", //base64字符串(文件流字节编码)
"fileName":"带后缀的文件名.xlsx" //文件名称,带后缀
}]
}
线下客户自己开发的数据对接模块数据上传,这里就不再介绍了,这里介绍下明道工作流中的实现模式及步骤。
工作流中操作步骤如下:
方案一:通过代码生成 base64 并输出;提供给下一节点【发送 API 请求】
- 文件的 url 通过代码块转 base64.
var fetch=require('node-fetch');
var data= await fetch(input.imgurl).then(r => r.buffer()).then(buf => buf.toString('base64'));
output={data:data}
- 通过工作表 API 新增/修改记录
方案二:代码块内生成 base64,并直接调用工作表 API

var fetch=require('node-fetch')
var imgurl=JSON.parse(input.imgurl)[0];
var cbase64 = await fetch(imgurl).then(r => r.buffer()).then(buf => buf.toString('base64'));
//接口地址
var url =input.url;
var result={};
var data={
"appKey": input.appKey,
"sign": input.sign,
"worksheetId": input.worksheetId,
"rowId": input.rid,
"controls": [
{
"controlId": "images",
"value": "",
"editType": "0",
"valueType": "2",
"controlFiles": [
{
"baseFile":cbase64,
"fileName": "我是图片.png"
}
]
}
]
}
var result=await fetch(url, {
method: 'post',
headers:{
"Content-Type":'application/json'
},
body: JSON.stringify(data)
})
.then(function(resp){
if(resp.ok){
return resp.json()
}else{
return resp.text()
}})
.catch(function(error){ return error.toString()});
output={result:result,imgurl:imgurl}
最后效果
附件怎么直接转 base64
附件 value 的值不对,需要时 url 字符串已英文逗号拼接; "value":"url,url2"
之前的输入网址数据类型异常的问题终于找到了,在多数据来源的工作流中,附件控件传递的是控件名列表,而非含有网址信息的值列表。另一个相关问题,貌似内核通信问题限制了 4 兆大小,若使用 base64 传递方式 API 改文件名,效率不高且有大小限制。使用外部文件链接方式改名,貌似通过 post 获取记录详情的 value 不能直接用,也找不到相关格式说明,哪位大神指导一下?
![IMG_20240331_124518.jpg]()
按照这个改了,还是测试能通过、工作流就报错,有没有日志或方法,看看传入 fetch 的究竟是什么数据呢
附件在代码块入参的形态是 ["url"] 所以你这里需要先把他从对象中取出来,在传递到 fetch。参考这里:https://s.mingdao.net/public/workflow/60bd9b35b950698a7ea82854
例如:
var list=JSON.parse(input.fileurl||'[]')
var base64='',url='',
if(list.length>0){
url=list[0]
var base64=你的请求
}
output={url:url,base64:base64}
纠正一下 Base64 不是加密,Base64 是一种编码格式。
直接代码块内引入 node-fetch 调用明道云的工作表接口上传
文件太大怎么处理呀?
学习了
上面的就是解决方案。 1 通过代码块 难道文件的 base64 2 通过工作表的 API 写入附件,文件名支持自己自定义的![image.png]()
我们后端开发给我们提供一个 url 可以下载文件,但是是以无后缀名的文件流方式提供下载的。我本地电脑话通过浏览器把文件下载后,手动再修改文件名加个 pdf 后缀名就能正常打开了。求问大佬这种情况话,我该咋写 webhook 方式把文件自动转成 pdf 放进附件内啊?