0

我在让 Autodesk Forge API 接受我的文件到照片场景时遇到问题。我从 API 调用中得到的错误消息是:

{"developerMessage":"Access token provided is invalid or expired.", "moreInfo": "https://forge.autodesk.com/en/docs/oauth/v2/developers_guide/error_handling/", "errorCode": ""}

这个错误让我很困惑,因为它是在我刚刚成功使用相同的 forge_access_token 创建我要添加这些文件的照片场景之后立即出现的。

""errorCode": ""部分没有为我提供任何错误的线索。

这是我程序中的代码序列:

  1. 获取forge_access_token,
  2. 创建照片场景,然后
  3. 将图像文件添加到照片场景。

1. 我成功获得了一个 access_token 与此代码:

# Request for a 2-legged OAuth access token
json=`curl -s $FORGE_URL/authentication/v1/authenticate \
    -d client_id=$CLIENT_ID\
    -d client_secret=$CLIENT_SECRET\
    -d grant_type=client_credentials\
    -d scope=data:read+data:write
`
forge_access_token=`echo $json | jq -r .access_token`
echo "forge_access_token: $forge_access_token"

2.然后我在下面的代码中使用返回的forge_access_token成功请求一个新的photosceneid:

json=`curl -s $FORGE_URL/photo-to-3d/v1/photoscene \
    -X 'POST' \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $forge_access_token" \
    -d "scenename=$scan_id" \
    -d 'scenetype=object' \
    -d 'format=obj,rcm'
`
# echo $json
photosceneid=`echo $json | jq -r .Photoscene.photosceneid`
echo "Created Photoscene: $photosceneid"

3. 但是当我调用此代码将图像文件添加到这个新的照片场景时,它无法添加它们:

JPG_FILES=$scan_dir/*.jpg
i=0
for image_file in $JPG_FILES
do
    file_name=`basename $image_file`    
    json=`curl -s $FORGE_URL/photo-to-3d/v1/file \
        -H 'Authorization: Bearer $forge_access_token' \
        -d 'photosceneid=$photosceneid' \
        -d 'type=image' \
        -d 'file[$i]=$image_file' 
    `
    i=$((i+1))

我没有收到此错误消息:

{"developerMessage":"Access token provided is invalid or expired.", "moreInfo": "https://forge.autodesk.com/en/docs/oauth/v2/developers_guide/error_handling/", "errorCode": ""}

有没有其他 Forge Reality Capture API 用户看到过这个?你是怎么解决的?

4

2 回答 2

0

问题在于 BASH 如何处理单引号和双引号。如果 $variable 出现在单引号而不是双引号中,BASH 不会替换这些值。

最后部分的以下重写删除了“提供的访问令牌无效或过期”。错误:

JPG_FILES=$scan_dir/*.jpg
i=0
for image_file in $JPG_FILES
do
    file_name=`basename $image_file`    
    json=`curl -s $FORGE_URL/photo-to-3d/v1/file \
        -H "Authorization: Bearer $forge_access_token" \
        -d "photosceneid=$photosceneid" \
        -d 'type=image' \
        -d "file[$i]=$image_file" 
    `
    i=$((i+1))

通过切换到双引号来修复上述代码后,我现在在上传文件时遇到了一个新问题,我将把它作为一个新问题发布,因为它与上述不同。

于 2020-06-18T03:13:59.977 回答
0

上传所有 JPEG 文件需要多长时间?访问令牌通常设置为在一小时内过期,因此如果图像太多或太大,则令牌可能会在所有内容上传之前过期。

此外,考虑使用curl标志-v,以便您还可以看到正在发送的确切请求标头,以确保$forge_access_token插值不会发生任何奇怪的事情。

如果以上都不是问题,请通过以下方式与我们联系forge (dot) help (at) autodesk (dot) com- 尽可能详细地说明您的情况 - 我们会将其传递给工程团队。

于 2020-06-17T08:54:56.037 回答