Autodesk Forge:转换失败 - 文件到存储桶数据:fileContent
Posted
技术标签:
【中文标题】Autodesk Forge:转换失败 - 文件到存储桶数据:fileContent【英文标题】:Autodesk Forge: Translation Failed - File to bucket data: fileContent 【发布时间】:2020-03-31 13:38:12 【问题描述】:我一直在关注this viewer walkthrough tutorial (node.js),用于在 Forge 查看器中上传和显示文件。
我一直在使用 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);
;
还有put请求:
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】:您可以使用诸如https://oss-manager.autodesk.io/ 之类的实用程序网络应用程序来检查您之前上传的文件是否正确(通过下载或尝试通过应用程序的 UI 将其转换为 SVF)并使用此实用程序上传文件,然后尝试用您的应用程序翻译它。它还可用于删除存储桶中给定文件的所有衍生文件。 这有助于缩小问题的范围。
也有可能是文件第一次没有正确上传(在您仍在测试的某个时间点),因此当时翻译失败,现在它不会再次尝试翻译文件。您可以通过将 x-ads-force 添加到值为“true”的 POST Job 请求中来强制进行翻译 - 请参阅 @987654322 @
【讨论】:
我不知道这个应用程序存在,非常感谢!我现在正在 github 上查看它。不幸的是,这不是问题,我已经创建了新的存储桶并再次上传了文件,文件存在检查 GET buckets/:bucketKey/objects,但翻译失败。我现在正在查看的 repo 与我的类似,因此我应该能够找到问题所在。我会及时通知你以上是关于Autodesk Forge:转换失败 - 文件到存储桶数据:fileContent的主要内容,如果未能解决你的问题,请参考以下文章
Autodesk forge 将 rvt 转换为 IFC 并移入文件夹
Autodesk Forge:添加图像文件指定的图像协议无效
Autodesk Forge Viewer 在本地服务器上存储文件?
Autodesk Forge - 将源文件转换为 .obj 时出错