从Item Version转换Derivative URN结果不符的技术咨询
问题原因及解决方法
核心原因
你错误地直接对Item Version的Lineage URN进行了Base64编码,但Derivative服务需要的是对应版本的文件URN(File URN),两者的前缀结构不同,导致编码结果出现差异:
- 你使用的原URN:
urn:adsk.wipprod:dm.lineage:j2R5fwxfTJq9DOsvX1p9ZQ?version=7 - 正确的编码源URN:
urn:adsk.wipprod:fs.file:vf.j2R5fwxfTJq9DOsvX1p9ZQ?version=7
对比可见,需要将原URN中的dm.lineage:替换为fs.file:vf.,再进行Base64编码,才能得到正确的Derivative URN。
正确的实现代码
import base64 # 原始的Item Version Lineage URN item_version_lineage = "urn:adsk.wipprod:dm.lineage:j2R5fwxfTJq9DOsvX1p9ZQ?version=7" # 转换为File URN item_version_file = item_version_lineage.replace("dm.lineage:", "fs.file:vf.") # 进行URL安全的Base64编码(替换+为-,/为_,去掉末尾=) urn = base64.urlsafe_b64encode(item_version_file.encode()).decode().rstrip('=') print(f"Derivative URN: {urn}")
验证结果
运行上述代码后,输出会与你提供的正确Derivative URN一致:dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmoyUjVmd3hmVEpxOURPc3ZYMXA5WlE_dmVyc2lvbj03
补充说明
Derivative服务的URN必须指向具体的文件资源,而Lineage URN仅用于标识版本的 lineage 关联记录,两者属于不同的资源类型,不能直接混用编码。使用base64.urlsafe_b64encode可以一步完成URL安全的编码转换,无需手动替换/为_,同时记得去掉编码结果末尾的=符号(Autodesk服务不要求保留这些填充字符)。
内容的提问来源于stack exchange,提问作者chuongmep
相关产品推荐
相关产品推荐

