使用Autodesk API创建文件版本

时间:2017-10-12 20:57:25

标签: python autodesk-forge

在我的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."}]}

上述日志中所有变量的样本值均在右侧。

2 个答案:

答案 0 :(得分:1)

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

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

  2. 暂停调用Authentication API 获得一个3腿的令牌GET调用,以获取哪些集线器的详细信息 我们可以访问BIM 360 Docs(BIM所需的APP注册) 360 API访问)

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

  4. GET调用以找到上传将要发生的文件夹(计划,     项目文件,图纸)。

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

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

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

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

  8. 检查BIM 360文档以查看最近上传的文件。

    希望它有所帮助。

答案 1 :(得分:0)

从此forum response开始,the tutorial已过时,您应使用autodesk.bim360:File(但不是autodedsk.bim360:File作为拼写错误建议)代替{{1} }}。有一个更新的example here.

它仍无法正常工作,但至少我的错误转移到autodesk.core:File