【问题标题】:Autodesk Forge API createBucket not workingAutodesk Forge API createBucket 不工作
【发布时间】:2018-04-25 20:53:22
【问题描述】:

我正在尝试使用autodesk-forge-api 构建一个应用程序。首先,我在我的 Autodesk 配置中创建了一个应用程序来接收进行 API 调用所需的“ClientID”和“Client Secret”。

不知何故,当我尝试使用createBucket-API 调用,即documentet here 时,我得到了bad request 400 的答案,但我不知道为什么。

这是我的 API 调用:

let oAuth2TwoLegged = new ForgeSDK.AuthClientTwoLegged(clientId, 
  clientSecret, [
  'data:read',
  'data:write',
  'bucket:create',
  'bucket:read',
  'data:write',
  'data:read',
  'viewables:read'           
], autoRefresh);

oAuth2TwoLegged.authenticate().then(function(credentials){

  var HubsApi = new ForgeSDK.HubsApi(); //Hubs Client
  var BucketsApi = new ForgeSDK.BucketsApi(); //Buckets Client

  BucketsApi.createBucket({bucketKey :"Test", policyKey: "transient"},{}, oAuth2TwoLegged, credentials).then((response) => {
    console.log(' new BUCKET: ', response)
  }).catch((err) => {
    console.log('ERROR BLA: ', err)
  });

}).catch((err) => {
  console.log('oauth error: ', err)
})

有没有人建议我可能做错了什么?

当我使用不同的调用时,例如:

BucketsApi.getBuckets({}, oAuth2TwoLegged, credentials).then(function(response){
   console.log('buckets: ', response.body);
  }, function(err){
    console.error(err);
});

它有效...

编辑

如果我执行以下操作:

BucketsApi.createBucket(xyda_select_rtl, {'bucketKey' :'xyda_select_rtl', 
   'policyKey': 'transient'}, oAuth2TwoLegged, credentials).then((response) => {
    console.log(' new BUCKET: ', response)
  }).catch((err) => {
    console.log('ERROR BLA: ', err)
});

我得到xyda_select_rtl 没有定义!?!

当我添加时:

var xyda_select_rtl;

我收到错误Missing the required parameter 'postBuckets' when calling createBucket

嗯....是的:-/

【问题讨论】:

    标签: javascript autodesk-forge autodesk autodesk-model-derivative autodesk-data-management


    【解决方案1】:

    您需要为您的存储桶指定一个唯一的名称,对于这个坏消息,我们深表歉意。没你想的那么糟糕。例如,只需将您的 client_id 添加到存储桶名称:

    "test-tAp1fqjjtcgqS4CKpCYDjAyNbKW4IVCC"
    

    或者使用代码生成的随机guid:

    function guid() {
    
        var d = new Date().getTime();
    
        var guid = 'xxxx-xxxx-xxxx'.replace(
          /[xy]/g,
          function (c) {
            var r = (d + Math.random() * 16) % 16 | 0;
            d = Math.floor(d / 16);
            return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
          });
    
        return guid;
      }
    

    然后用它来生成一个桶名:

    var bucketKey = "test-" + guid()
    

    【讨论】:

      【解决方案2】:

      您的存储桶密钥似乎重复,或者您的客户端 ID 和客户端密码包含无效字符。请在您的应用程序中检查这些参数。以及桶的名称,即桶键应该是全局唯一的。如果您传递给 Post /buckets 的名称存在,您也会收到错误消息。我建议您以这种方式使用命名模式:

      Test + { Your Bucket Key }
      

      希望对你有帮助。

      【讨论】:

      • 嗯,这给了我“未定义测试”
      • 是什么让您“未定义测试”?全局意味着 Forge OSS 不允许在服务器端有一个名为“Test”的存储桶。如果您在应用程序中没有看到该存储桶,则它可能是其他开发人员的令牌。您可以通过 Get ‘/buckets/Test’ 进行检查。
      • 好吗?但这将非常非常不灵活,我怎么知道别人怎么称呼他们的桶?检查我上面编辑的问题。
      • 不能做最新调用,第一个参数是API payload。它应该包含bucketKey和policyKey,即第一个API调用是正确的,但是你的bucketKey中的值被复制到了Forge OSS。您应该更改您的 createBuckey 有效负载中的 bucketKey 值。
      猜你喜欢
      • 2021-05-03
      • 2020-04-29
      • 2016-11-16
      • 2017-03-25
      • 2017-01-12
      • 2019-11-16
      • 2019-04-21
      • 2018-01-17
      • 2021-04-19
      相关资源
      最近更新 更多