附件上传到一些文件接口时附件名乱码情况处理(适用于企微文件上传接口等)

分享  收藏
0 / 55

最近有不止一个客户遇到问题,使用工作流的 API 节点上传附件到一些接口文件,结果上传后文件名变成了乱码一样的东西,用企微文件上传接口举个栗子:
接口说明:
c5b5bdbe-f2c8-4520-a017-35046d271e94.png
在工作流中使用 API 上传附件:
image.png

图里可以看到,form-data 中媒体文件标识,应包含 filename、filelength、content-type 等信息 ,但是直接上传附件时,不知道为什么读不到 filename(暂时没搞明白是为什么,有其他小伙伴知道的话可以补充一下) , 导致对端接口在接收到附件时文件名变成了一堆看不懂的乱码。这里猜测可能是被服务端自动重命名了,生成了一个唯一文件名(类似于 UUID 随机字符串的东西) .那咋办呢,可以用代码块~

逻辑很简单,先将附件处理成可下载的 URL 和转码文件名 , 将 URL 和文件名按照接口规范构建请求体,然后请求接口即可

第一步:获取附件的 URL 和文件名
方式参考这篇文章 https://bbs.mingdao.net/topic/7705 注意注意,这篇文章里的代码块是 JS,并且是一次性获取了多个附件的 URL 和文件名,所以接下来用子流程来一一处理(或者第二步代码中用循环的方式)

第二步:获取到 URL 和文件名后,用 python 代码块上传附件。如图,代码在最后(这是企微文件上传接口,实际根据需求替换)
image.png

image.png

image.png

示例代码:

file_url = input["file_url"]
file_name = input["file_name"]

# 请求的key和type参数
key = "XXXXXXX"
file_type = "file"

# 通过链接获取文件内容
response = requests.get(file_url)
file_content = response.content

# 构造上传请求的url
upload_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={key}&type={file_type}"

# 上传文件
files = {
    'media': (file_name, file_content, 'application/octet-stream')
}

# 发起POST请求上传文件
response = requests.post(upload_url, files=files)

# 解析并打印响应内容
response_json = response.json() 

# 输出返回结果
output = {"response": response_json}