Autodesk Forge:翻译失败-文件到存储桶数据:fileContent

时间:2019-12-06 14:38:37

标签: autodesk-forge autodesk autodesk-data-management

我一直关注this viewer walkthrough tutorial(node.js),用于在伪造查看器中上传和显示文件。

我一直在使用angular重新创建示例,除了不是用户上传文件,而是从我的资产文件夹将文件硬编码到应用中以进行测试。

当我尝试将revit文件转换为svf时出现问题。

我知道revit文件没有问题,因为我使用models.autodesk.io来检查一切是否良好。

我可以成功创建存储桶并发布作业,但是在调用translation status来检查翻译是否完成时,我收到了以下信息:

{
    "type": "manifest",
    "hasThumbnail": "false",
    "status": "failed",
    "progress": "complete",
    "region": "US",
    "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6OTA0ZmZmYmMtODI1Ni00OWY2LWI3YzYtNDI3MmM1ZDlmNDljL2RyYXBlLnJ2dA",
    "version": "1.0",
    "derivatives": [
        {
            "name": "drape.rvt",
            "hasThumbnail": "false",
            "status": "failed",
            "progress": "complete",
            "messages": [
                {
                    "type": "error",
                    "code": "Revit-UnsupportedFileType",
                    "message": "<message>The file is not a Revit file or is not a supported version.</message>"
                },
                {
                    "type": "error",
                    "message": "Possibly recoverable warning exit code from extractor: -536870935",
                    "code": "TranslationWorker-RecoverableInternalFailure"
                }
            ],
            "outputType": "svf"
        }
    ]
}

我非常确定我用于翻译项目的代码是正确的,我认为问题来自uploading the file to my bucket

PUT请求的主体结构必须包含文件的内容。

这是我的代码,用于使用 XMLHttpRequest FileReader

加载和读取文件
  loadFile(bucketKey, accessToken) {

    const reader: XMLHttpRequest = new XMLHttpRequest();
    reader.open('GET', './assets/drape.rvt', true);
    reader.responseType = 'blob';

    reader.onloadend = (request) => {

        const blob: Blob = reader.response;

        console.log(blob); //returns Blob {size: 372736, type: "text/xml"}

        // Create file from blob
        const modelFile: File = new File([blob], 'drape.rvt');

        this.readFile(bucketKey, accessToken, modelFile);

    };

    reader.send();
  }

  readFile(bucketKey, accessToken, modelFile) {

    const myReader: FileReader = new FileReader();

    myReader.readAsArrayBuffer(modelFile);
    myReader.onloadend = (e) => {

      const arrayBuffer: ArrayBuffer = myReader.result as ArrayBuffer;

      this.fileToBucket(bucketKey, accessToken, arrayBuffer);
    };
  }

放置请求:

  fileToBucket(bucketKey, accessToken, fileContent) {

    const encodedBucketKey = encodeURIComponent(bucketKey);
    const encodedFileName = encodeURIComponent('drape.rvt');
    const uploadURI = `https://developer.api.autodesk.com/oss/v2/buckets/${encodedBucketKey}/objects/${encodedFileName}`;

    const options = {
      headers: new HttpHeaders({
        'Content-Type':  'application/octet-stream',
        Authorization: 'Bearer ' + accessToken
      })
    };

    const body = {
      data: fileContent
    };

    this.http.put(uploadURI, body, options)
    .subscribe(
      success => {

        // URL safe base64 encoding
        const urn = btoa(success.objectId);
        this.translateObject(accessToken, urn);
      }, error => {
        console.log('fileToBucket');
        console.log(error);
      });
  }

我以为文件内容是问题,这与在本教程中使用node.js的情况等效:PUT request read file

1 个答案:

答案 0 :(得分:1)

您可以使用https://oss-manager.autodesk.io/之类的实用程序网络应用程序来检查以前上传的文件是否正确(通过下载该文件或尝试通过该应用程序的UI将其转换为SVF),然后使用该实用程序上传该文件,并然后尝试使用您的应用进行翻译。它还可以用于删除存储桶中给定文件的所有衍生产品。 这可以帮助缩小问题的范围。

也有可能第一次未正确上传文件(在您仍在测试时的某个时候),因此翻译失败了,现在它不再尝试再次翻译文件。您可以通过将 x-ads-force 添加到 POST Job 请求中,并将其值为“ true ”来强制进行翻译-参见{{ 3}}