无法将图像文件添加到新的照片场景 [autodesk-forge] API Reality Capture

Posted

技术标签:

【中文标题】无法将图像文件添加到新的照片场景 [autodesk-forge] API Reality Capture【英文标题】:Unable to add image files to new photoscene [autodesk-forge] API Reality Capture 【发布时间】:2020-10-06 18:36:31 【问题描述】:

我在让 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": "" 部分没有为我提供任何错误的线索。

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

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

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 用户看到过这个?你是怎么解决的?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

问题在于 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))

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

【讨论】:

以上是关于无法将图像文件添加到新的照片场景 [autodesk-forge] API Reality Capture的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 segue 将图像传递到新的视图控制器?

将UIImage添加到新的Scroll View

在一个变更块内将新资产添加到新资产集合

恢复存储在应用程序照片中的文件夹路径图像(Mac OS)

将本地化文件添加到新的 IOS 7 应用程序

嵌套的 ScrollView - 缩放后无法滚动到新照片