之前写了一篇此类的文章 https://bbs.mingdao.net/topic/1297,只是它仅支持单个附件下载。因为明道的界面推送 只能打开一个链接,那么就需要我们去想办法把附件整合在一起,那就打压缩包了。
整体方案流程如下:

左侧分支:原来的单个下载附件的模式。
右侧分支:
第一步代码块处理附件 多个附件 写入到 zip 中,zip 内容 base64 编码,调用 API 接口写入到工作流新的暂存附件字段中

import io
import zipfile
import base64
import requests
import urllib.parse
import json
#filename = urllib.parse.unquote(urllib.parse.parse_qs(urllib.parse.urlparse(obj["DownloadUrl"]).query)["attname"][0])
def download_attachments(attachment_urls):
attachments = []
for obj in attachment_urls:
response = requests.get(obj["DownloadUrl"])
attachment = {
"filename": obj["original_file_name"],
"content": response.content
}
attachments.append(attachment)
return attachments
def compress_to_zip(attachments):
zip_data = io.BytesIO()
with zipfile.ZipFile(zip_data, "w") as zipf:
for attachment in attachments:
zipf.writestr(attachment["filename"], attachment["content"])
zip_data.seek(0)
return zip_data.read()
def generate_base64(zip_content):
base64_data = base64.b64encode(zip_content).decode("utf-8")
return base64_data
inparam={
"appKey": input["appKey"],
"sign": input["sign"],
"worksheetId": input["worksheetId"],
"rowId": input["rowid"]
}
imgresponse=requests.post(input["url"]+'/v2/open/worksheet/getRowByIdPost',json=inparam)
imgresult=imgresponse.json()
attachment_urls =json.loads(imgresult["data"][input["oldFileid"]])
attachments = download_attachments(attachment_urls)
zip_content = compress_to_zip(attachments)
base64_data = generate_base64(zip_content)
param={
"appKey": input["appKey"],
"sign": input["sign"],
"worksheetId": input["worksheetId"],
"rowId": input["rowid"],
"controls": [
{
"controlId": input["newFileid"],
"value": "",
"editType": "0",
"valueType": "2",
"controlFiles": [
{
"baseFile": base64_data ,
"fileName": input["name"]+".zip"
}
]
}
]
}
response=requests.post(input["url"]+'/v2/open/worksheet/editRow',json=param)
result=response.json()
output={'result':result}
第二步 获取 zip 附件的链接 ,下载。
效果如下图:

感谢过去一年的陪伴与支持,我给大家提前拜个早年啦!祝各位在新一年里龙行好运,身体健康,生意兴隆!
参考第一篇里面的代码 https://bbs.mingdao.net/topic/1297
老师,这一块的 js 代码是啥呀,能分享一下吗?
你好,能问下通知栏里面待办怎么消失吗?之前找到工作流了,里面发了很多填写,但是我点了中止,还是没能消除待办事项,是在服务器上面有办法消除吗
👍
有吗,应该是视觉错觉吧,他只是打开了一个下载链接然后又关闭了而已
有没有办法下载的时候屏幕不要抖动,每次下载感觉电脑被吓一跳,哈哈哈
host 配置 https://api.mingdao.com 看下;或者有群么 群里发下会有看下
大佬 检查了 这是参数
检查下你的入参;是否配置这个参数 以及参数大小写 及存在空格问题是否存在
请问 大佬 报这个问题 是我哪里填写错误了吗?
感觉用得上,mark
满满干货
API 是用的哪个呀。。。
泉总好,有些文件 100 多页,大小超过 7M 了,有何应对之策?
案例就是在 SaaS 环境上写的;只不过有一个注意点就是 压包后的文件大小需要在 7M 以下,否则会出问题。
参考这里:https://help.mingdao.com/faq/numbers#4api
我在 SaaS 用的 会有之前我发的报错
附件压缩 zip 的代码,只能在私有部署环境使用吗?可以在 SaaS 环境使用吗
有其他问题!
返回 response.text 看看
这问题怎么解决呀
这个错误是怎么回事呀?
泉哥出品,必属精品......