我一直关注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。
答案 0 :(得分:1)
您可以使用https://oss-manager.autodesk.io/之类的实用程序网络应用程序来检查以前上传的文件是否正确(通过下载该文件或尝试通过该应用程序的UI将其转换为SVF),然后使用该实用程序上传该文件,并然后尝试使用您的应用进行翻译。它还可以用于删除存储桶中给定文件的所有衍生产品。 这可以帮助缩小问题的范围。
也有可能第一次未正确上传文件(在您仍在测试时的某个时候),因此翻译失败了,现在它不再尝试再次翻译文件。您可以通过将 x-ads-force 添加到 POST Job 请求中,并将其值为“ true ”来强制进行翻译-参见{{ 3}}