无法使用GetDerivativeManifest下载OBJ文件

时间:2017-09-21 05:49:03

标签: autodesk-forge autodesk-model-derivative

我正在尝试使用Autodesk.Forge .NET API方法GetDerivativeManifest(C#)下载从SVF文件生成的OBJ文件。 OBJ文件已成功创建。但是,该方法不提供可用于检索文件并在本地保存文件的流。

如何获取OBJ文件?

1 个答案:

答案 0 :(得分:0)

我没有准备好给你的C#示例,但我遇到了与Node.js SDK相同的问题。我通过自己实现REST调用来解决这个问题:

download (token, urn, derivativeURN, opts = {}) {

  // TODO SDK KO
  //this._APIAuth.accessToken = token
  //
  //return this._derivativesAPI.getDerivativeManifest(
  //  urn,
  //  derivativeURN,
  //  opts)

  return new Promise((resolve, reject) => {

    const url =
      `${DerivativeSvc.SERVICE_BASE_URL}/designdata/` +
      `${encodeURIComponent(urn)}/manifest/` +
      `${encodeURIComponent(derivativeURN)}`

    request({
      url: url,
      method: 'GET',
      headers: {
        'Authorization': 'Bearer ' + token.access_token
      },
      encoding: null
    }, function(err, response, body) {

      try {

        if (err) {

          return reject(err)
        }

        if (response && [200, 201, 202].indexOf(
            response.statusCode) < 0) {

          return reject(response.statusMessage)
        }

        if (opts.base64) {

          resolve(bufferToBase64(body))

        } else {

          resolve(body)
        }

      } catch(ex) {

        console.log(ex)

        reject(ex)
      }
    })
  })
}

以下是我在端点中调用该方法的方法:

/////////////////////////////////////////////////////////
// GET /download
// Download derivative resource
//
/////////////////////////////////////////////////////////
router.get('/download', async (req, res) => {

  try {

    const filename = req.query.filename || 'download'

    const derivativeUrn = req.query.derivativeUrn

    // return base64 encoded for thumbnails
    const base64 = req.query.base64

    const urn = req.query.urn

    const forgeSvc = ServiceManager.getService(
      'ForgeSvc')

    const token = await forgeSvc.get2LeggedToken()

    const derivativesSvc = ServiceManager.getService(
      'DerivativesSvc')

    const response = await derivativesSvc.download(
      token, urn, derivativeUrn, {
        base64: base64
      })

    res.set('Content-Type', 'application/octet-stream')

    res.set('Content-Disposition',
      `attachment filename="${filename}"`)

    res.end(response)

  } catch (ex) {

    res.status(ex.statusCode || 500)
    res.json(ex)
  }
})

希望有所帮助