首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伪造数据管理返回压缩文件

伪造数据管理返回压缩文件
EN

Stack Overflow用户
提问于 2022-02-03 21:27:47
回答 1查看 94关注 0票数 0

当我获得云中获得的Revit的下载链接时,如这里所示。我发现这个链接有时返回一个Revit文件,有时返回一个zip文件。我将这个URL传递给,所以它有时会失败(万一链接下载了一个zip文件)。在这两种情况下,当item.data.attributes.displayName返回*.rvt时,如何区分这两个项。在所有情况下,如何获得rvt文件?

这个问题讨论了同样的问题,但是没有解决办法(它已经2年了,希望有所改变)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-03 21:57:20

修改4工作共享,将文件发布到BIM360。

这个文件被命名为.rvt文件(即。( 'mybigrevitproject.rvt'),但实际上,它实际上是一个伪装的压缩文件。如果您将其重命名为zip、下载并解压缩,您将在zip中找到许多.RVT。

在不下载整个文件的情况下,解决这个问题有一个巧妙的技巧。

在前16个字节上使用范围GET,并检查魔术标题。

有关详细信息,请参阅下面的回购:https://github.com/wallabyway

下面是帮助您的代码片段:https://github.com/wallabyway/bim360-zip-extract/blob/master/server.js#L167

更新:我想说的是回购:https://github.com/wallabyway/bim360-zip-extract

您可以根据以下pkzip信息找到神奇的头签名:https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html

代码语言:javascript
复制
The signature of the local file header. This is always '\x50\x4b\x03\x04'.

范围get的代码是:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70978535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档