Forge 数据管理 returns zip 文件
Forge Data management returns zip file
当我下载 link 云中获得的 Revit 模型时 here。我发现有时 link returns 是 Revit 文件,有时是 zip 文件。我将此 URL 传递给 Design Automation,因此它有时会失败(以防 link 下载 zip 文件)。在两种情况下如何区分这两个项目 item.data.attributes.displayName
returns *.rvt。在所有情况下应该如何获取rvt文件?
这个 question 讨论了同样的问题,但没有解决方案(已经 2 年了,希望有所改变)。
Revit 4 工作共享,将文件发布到 BIM360。
这个文件被命名为.rvt文件(即'mybigrevitproject.rvt'),但实际上,它实际上是一个变相的zip文件。如果将其重命名为 zip,下载并解压缩,您会发现 zip 中有很多 .RVT。
有一个巧妙的技巧可以解决这个问题,而无需下载整个文件。
在前 16 个字节上使用范围 GET,并检查魔术 header。
有关完整详细信息,请查看此存储库:https://github.com/wallabyway
下面是一段可以提供帮助的代码:
https://github.com/wallabyway/bim360-zip-extract/blob/master/server.js#L167
更新:
我的意思是说这个回购协议:https://github.com/wallabyway/bim360-zip-extract
您可以根据此处的 pkzip 信息找到神奇的 header 签名:https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html
The signature of the local file header. This is always '\x50\x4b\x03\x04'.
获取范围的代码是:
const chunksize = 16 * 1024; // only need 16k bytes of data
const buffSignature = await this._fetchWrite(0, chunksize); // fetch/write header
// something like this...
if (buffSignature.slice(0,3) === \x50\x4b\x03\x04) {
console.log("this is a zip file, not a Revit file...");
}
async _fetchWrite( offset, length ) {
const res = await fetch( this.URL, { headers: {
'range': `bytes=${offset}-${offset+length}`,
'Authorization': `Bearer ${this.token}`
}});
if (res.status != 206)
throw(`error:${res.statusText}, bytes=${offset}-${offset+length}`)
const buff = await res.buffer();
return buff;
}
当我下载 link 云中获得的 Revit 模型时 here。我发现有时 link returns 是 Revit 文件,有时是 zip 文件。我将此 URL 传递给 Design Automation,因此它有时会失败(以防 link 下载 zip 文件)。在两种情况下如何区分这两个项目 item.data.attributes.displayName
returns *.rvt。在所有情况下应该如何获取rvt文件?
这个 question 讨论了同样的问题,但没有解决方案(已经 2 年了,希望有所改变)。
Revit 4 工作共享,将文件发布到 BIM360。
这个文件被命名为.rvt文件(即'mybigrevitproject.rvt'),但实际上,它实际上是一个变相的zip文件。如果将其重命名为 zip,下载并解压缩,您会发现 zip 中有很多 .RVT。
有一个巧妙的技巧可以解决这个问题,而无需下载整个文件。
在前 16 个字节上使用范围 GET,并检查魔术 header。
有关完整详细信息,请查看此存储库:https://github.com/wallabyway
下面是一段可以提供帮助的代码: https://github.com/wallabyway/bim360-zip-extract/blob/master/server.js#L167
更新: 我的意思是说这个回购协议:https://github.com/wallabyway/bim360-zip-extract
您可以根据此处的 pkzip 信息找到神奇的 header 签名:https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html
The signature of the local file header. This is always '\x50\x4b\x03\x04'.
获取范围的代码是:
const chunksize = 16 * 1024; // only need 16k bytes of data
const buffSignature = await this._fetchWrite(0, chunksize); // fetch/write header
// something like this...
if (buffSignature.slice(0,3) === \x50\x4b\x03\x04) {
console.log("this is a zip file, not a Revit file...");
}
async _fetchWrite( offset, length ) {
const res = await fetch( this.URL, { headers: {
'range': `bytes=${offset}-${offset+length}`,
'Authorization': `Bearer ${this.token}`
}});
if (res.status != 206)
throw(`error:${res.statusText}, bytes=${offset}-${offset+length}`)
const buff = await res.buffer();
return buff;
}