【问题标题】:Create File Version with Autodesk API使用 Autodesk API 创建文件版本
【发布时间】:2018-03-24 22:22:20
【问题描述】:

继我的file upload 问题之后,我在文档中被困在Step 5。我收到 400 错误,提示我发送的某些数据不正确,但我认为我已完全匹配代码。

def create_version_for_file(self, file_name, project_id, folder_id, object_id):
    url = '{}data/v1/projects/{}/items'.format(self.DOMAIN, project_id)
    logger.info('Starting version create at %s for file_name %s, folder %s, object %s',
                url, file_name, folder_id, object_id)
    data = {
        "jsonapi": {"version": "1.0"},
        "data": {
            "type": "items",
            "attributes": {
                "displayName": file_name,
                "extension": {
                    "type": "items:autodesk.core:File",
                    "version": "1.0"
                }
            },
            "relationships": {
                "tip": {
                    "data": {
                        "type": "versions",
                        "id": "1"
                    }
                },
                "parent": {
                    "data": {
                        "type": "folders",
                        "id": folder_id
                    }
                }
            }
        },
        "included": [
            {
                "type": "versions",
                "id": "1",
                "attributes": {
                    "name": file_name,
                    "extension": {
                        "type": "versions:autodesk.core:File",
                        "version": "1.0"
                    }
                },
                "relationships": {
                    "storage": {
                        "data": {
                            "type": "objects",
                            "id": object_id
                        }
                    }
                }
            }
        ]
    }
    response = self.session.post(url, json=data, headers={
        'content-type': 'application/vnd.api+json',
        'accept': 'application/vnd.api+json'
    })
    if response.status_code != status.HTTP_201_CREATED:
        logger.warn('Version create for %s failed with status %s: %s', file_name, response.status_code,
                    response.content)
        return None
    return json.loads(response.content)

但是,请求总是这样失败:

Upload succeeded for README.md 2017-10-12 16:53:15,943 
Starting version create at https://developer.api.autodesk.com/data/v1/projects/b.f19577f2-c4da-428f-9625-bb53bf434cca/items for file_name README.md, folder urn:adsk.wipprod:fs.folder:co.Hx1ePxPtS1e0P-Ib9qudyQ, object urn:adsk.objects:os.object:3a06e38e-4cac-4ffc-981f-0e5c4e4078aab.f19577f2-c4da-428f-9625-bb53bf434cca/d14c3591-d339-4e62-907c-6f0c8b58b743.md
Version create for README.md failed with status 400: {"jsonapi":{"version":"1.0"},"errors":[{"id":"bfbf0a93-c92a-47af-9ce7-a6af48594e44","status":"400","code":"BAD_INPUT","title":"One or more input values in the request were bad","detail":"Request input is invalid for this operation."}]}

以上日志中所有变量的示例值都位于右侧。

【问题讨论】:

    标签: python autodesk-forge


    【解决方案1】:

    这可能设置正确,但您的存储位置可能创建在不正确的文件夹中。从我在论坛帖子中建议的教程中,您需要向下导航一级以避免在 BIM 360 Docs 的根文件夹中创建存储位置。尝试返回您的步骤并按照教程中的建议进行操作。专注于第 4 步

    1. 授权 Web 流程(这将返回我们获取 oauth 令牌所需的代码)

    2. 对 Authentication API 的休息调用以获取 3 条腿 Token GET 调用以获取我们在 BIM 360 Docs 中可以访问哪些集线器的详细信息(BIM 360 API 访问需要注册 APP)

    3. GET 调用以查找拥有您的资源的项目

    4. GET 调用以查找将进行上传的文件夹(计划、项目文件、图纸)。

      4.1 额外步骤可以包括对子文件夹的访问。

    5. POST 调用以在先前定义的文件夹中创建存储位置

    6. PUT 调用将文件上传到存储位置

    7. POST 调用以创建上传文件的第一个版本。

    检查 BIM 360 Docs 以查看您最近上传的文件。

    【讨论】:

    • 谢谢,但该教程在第 5-6 步让我感到困惑:在第 5 步中,您为.rvt 文件创建了一个存储位置,但显示了一个带有@987654323 PDF 文件的对象ID 的响应@ 与您发送 acecf083-a567-4cef-9873-d2842e52c725.rvt 作为对象 ID 的第 6 步示例中发布的数据不匹配。我猜PDF中间的响应是错误的?
    • 好吧,不管怎样,这个例子让我回家了,所以谢谢。您的链接比规范教程好得多,其中有几个错误让我走错了路。
    • 哦,是的,它不正确,我会解决这个问题,感谢您找到这个。很高兴你现在可以走了。干杯!
    • 谢谢。有机会可以看看我的next stopping point吗?这似乎也是一个文档错误。
    • 我会在今天晚些时候尝试解决它。我已经在我们的队列中了 :)
    【解决方案2】:

    从此forum responsethe tutorial 已过时,您应该使用autodesk.bim360:File(但不是autodedsk.bim360:File,因为错字提示)代替autodesk.core:File。有一个更新的example here.

    它仍然无法正常工作,但至少我的错误转移到了The urn must be an unassigned urn prepared by the create storage endpoint, by the same user.

    【讨论】:

    • 此错误表示您传递的存储位置不正确,首先您需要调用 POST projects/:project_id/storage 端点,为您上传的每个文件版本获取一个新存储并提供将存储的 objectId 正确到有效负载。我以完整的 node.js 代码为例:autode.sk/2yp2rVj
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多