使用 Javascript 下载 BIM360 Docs 文件

2024-05-07

我正在尝试使用 javascript 下载 BIM360 文档文件。我能够从 BIM360 获取文件响应,但无法保存具有正确内容的文件。这是我的 JS 代码 -

$(document).ready(function () {
    var anchor = $('.vcard-hyperlink');
    $.ajax({
        url: <file downloaded URL>,
        type: "GET",
        headers: {
            "Authorization": "Bearer " + <accessToken>
        },
        beforeSend: function (jqxhr) {

        },
        success: function (data) {
            // create a blob url representing the data
            var blob = new Blob([data]);
            var url = window.URL.createObjectURL(blob);
            // attach blob url to anchor element with download attribute
            var anchor = document.createElement('a');
            anchor.setAttribute('href', url);
            anchor.setAttribute('download', "test.docx");
            anchor.click();
            window.URL.revokeObjectURL(url);

        },
        error: function (jqxhr, textStatus, errorThrown) {
            console.log(textStatus, errorThrown)
        }
    });
});

要从 BIM360 服务下载文件,我使用了自定义Ajax 传输 http://api.jquery.com/jquery.ajaxtransport/jQuery 创建新的 XMLHttpRequest 并将所有接收到的数据传递回 jQuery,请参阅here http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/有关使用 jQuery 进行 Ajax 传输的详细信息。

/**
 *
 * jquery.binarytransport.js
 *
 * @description. jQuery ajax transport for making binary data type requests.
 * @version 1.0 
 * @author Henry Algus <[email protected] /cdn-cgi/l/email-protection>
 *
 */
// use this transport for "binary" data type
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR) {
    // check for conditions and support for blob / arraybuffer response type
    if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) {
        return {
            // create new XMLHttpRequest
            send: function(headers, callback) {
                // setup all variables
                var xhr = new XMLHttpRequest(),
                    url = options.url,
                    type = options.type,
                    async = options.async || true,
                    // blob or arraybuffer. Default is blob
                    dataType = options.responseType || "blob",
                    data = options.data || null,
                    username = options.username || null,
                    password = options.password || null;

                xhr.addEventListener('load', function() {
                    var data = {};
                    data[options.dataType] = xhr.response;
                    // make callback and send data
                    callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
                });

                xhr.open(type, url, async, username, password);

                // setup custom headers
                for (var i in headers) {
                    xhr.setRequestHeader(i, headers[i]);
                }

                xhr.responseType = dataType;
                xhr.send(data);
            },
            abort: function() {
                jqXHR.abort();
            }
        };
    }
});

以下代码片段是我用于通过 Forge 数据管理 API 从 BIM360 存储桶下载文件的代码。通过上述自定义 Ajax 传输和dataType: 'binary',API 响应将作为 blob 进行处理。之后,我们只需要创建一个 blob URL 和一个临时 HTML 链接来打开 blob URL 来保存下载的文件。

要获取实际的文件存储URL,需要调用API获取项目版本 https://developer.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-items-item_id-versions-GET/,下载链接的值为storage.meta.link.hrefAPI 响应中每个项目版本数据的属性。

$(function() {

  $('a#download').click(function(event) {
    event.preventDefault();

    const filename = '2f536896-88c8-4dee-b0c1-cdeee231a028.zip';

    const settings = {
      crossDomain: true,
      url: 'https://developer.api.autodesk.com/oss/v2/buckets/wip.dm.prod/objects/' + filename,
      method: 'GET',
      dataType: 'binary',
      processData: false,
      headers: {
        Authorization: 'Bearer YOUR_ACCESS_TOKEN',
        Content-Type: 'application/octet-stream'
      }
    };

    $.ajax(settings).done(function (blob, textStatus, jqXHR) {
        console.log(blob );
        console.log(textStatus);

      if( navigator.msSaveBlob )
        return navigator.msSaveBlob(blob, filename);

      const url = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.style = 'display: none';
      document.body.appendChild(a);

      a.href = url;
      a.download = filename;
      a.click();
      URL.revokeObjectURL(url);
    });
  });
})

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Javascript 下载 BIM360 Docs 文件 的相关文章

  • 使用 Autodesk A360 中的 URN 创建查看器应用程序

    我创建了一个查看器应用程序 它使用两条腿身份验证并显示已上传到我自己的存储桶的项目 现在 我希望能够查看已上传到 Autodesk A360 的项目 而不是查看自己存储桶中的项目 为此 我已完成以下步骤 实现了三足认证 项目中的A360账号
  • 如何为 Autodesk Forge App 指定多个回调 URL?

    您可以注册多个回调 URL 回调 URL 工具提示中有说明 但没有关于如何输入多个 URL 的示例 正确的分隔符是什么 我试过 n 这是工具提示上的拼写错误 我们将修复它 今天您可以使用 2022 年 9 月更新 此功能现已推出
  • 尝试在 Autodesk Forge / Bim360 中显示房间信息

    Okay so I m trying to show room information and geometry from a Revit project on Forge I ve made the call to https devel
  • Autodesk Forge:工作项因 AppPackage 问题而失败

    我的 AppPackage 无法加载 并且我无法在文档或错误消息 代码中找到确切的答案 我通过将其解压缩到本地计算机上的 C Program Files Autodesk ApplicationPlugins 中来测试该捆绑包 并且它按预期
  • setThemingColor 仅适用于叶节点 dbId

    从文档看来 您应该能够使用任何 dbId 调用 setThemingColor 但它似乎只有在您传递的 id 是叶节点时才有效 它是否正确 还有什么方法可以批量调用此方法 或者一次只能调用一个叶节点 我想将 dbId 数组传递到该方法中 是
  • 使用交叉请求获取 Forge 2 足身份验证

    我正在尝试创建一个简单的 html 页面来显示要锻造的上传模型 为了初始化伪造查看器 它需要访问令牌 为了请求访问令牌 我在交叉请求上使用 2 legged oAuth 因为我在不同的域上进行 POST 但它不断收到错误 不存在 Acces
  • 使用 Forge 获取 BIM 360 文件的 Revit 版本

    有没有办法在 BIM 360 上查找文件的 Revit 版本而无需下载 rvt 文件 我发现了类似的问题here https stackoverflow com questions 49141340 are any of the forge
  • Forge Viewer 在多模型上下文中选择

    我们的扩展目前利用viewer select 和模型中的dbId 列表 我们的客户希望在同一查看器中看到辅助模型 我们让他们能够在加载第一个模型后加载参考模型 然而 我们遇到了多个模型的问题 观众从其中一个模型中进行选择以外当我们调用vie
  • 如何激活 Autodesk Forge Snapper?

    我正在尝试激活自查看器版本 7 3 以来实施的新 Snapper 扩展 所以我像这样加载扩展 viewer loadExtension Autodesk Snapping 似乎有效 之后 我尝试访问类似的描述方法 但总是收到此错误 getS
  • 如何通过 AutoCAD Plot API 在 Forge 设计自动化中使用用户定义的字体

    我们使用 Forge Plot API 将 DWG 绘制为 PDF JPG 一位客户提出了使用名为 ROBBI TTF 的特殊 TTF 字体的 DWG 我想这个字体必须上传到 Forge 服务器才能使用 是否可以上传字体一次 以便它可以用于
  • 如何将带有 mtl 和纹理的 obj 上传到存储桶?

    正如标题所示 如何上传 obj 模型的材质文件和纹理 因为它们是硬编码在 obj 文件中的 我可以上传压缩的目录结构或多个关系正确的文件 因为 obj 的硬编码性质 吗 这是 dotty 试用网站上的带有材质和纹理的 OBJ 模型 http
  • 如何使 Autodesk Forge Viewer 支持 .rcp 文件

    我有一个 Web 项目 React 使用 Autodesk Forge Viewer 显示我们的企业 BIM360 帐户中的 3D 和 2D 模型 自去年以来 在 BIM360 中运行的同一查看器现在支持 rcp文件 我们也希望允许它 但到
  • 为什么在创建模型衍生作业时不考虑 Webhook 工作流程?

    当我创建一个作业时 使用一个 webhook 来完成https developer api autodesk com modelderivative v2 designdata job https developer api autodes
  • 使用 Autodesk Forge API 检索“描述”或“自定义属性”字段

    我们正在尝试使用 Autodesk Forge API 请求 命令检索 BIM360 文档中所示的描述或自定义属性字段 我们尝试了以下请求来检索有关特定文件的信息 https forge autodesk com en docs data
  • 使用 Javascript 下载 BIM360 Docs 文件

    我正在尝试使用 javascript 下载 BIM360 文档文件 我能够从 BIM360 获取文件响应 但无法保存具有正确内容的文件 这是我的 JS 代码 document ready function var anchor vcard
  • Autodesk Forge:dbId、objectId 和 nodeId 之间有什么区别?

    dbId objectId 和 nodeId 有什么区别 例如 以下函数的第一个参数是同一种id还是ids fitToView objectIds 模型 objectIds Id 数组 或 null getProperties dbId o
  • 如何复制当前的“家庭类型”并更新其参数

    我们正在使用 Autodesk 的 Forge 或平台服务 更具体地说 Design Automation我们在云中的文件上运行脚本 我们正在研究使用设计自动化将 类型目录 即 txt 文件 导入到打开的 rfa 文件中的方法 一种可能的方
  • Forge Viewer 无法显示边缘

    I used https github com Autodesk Forge viewer react express headless https github com Autodesk Forge viewer react expres
  • 将点从 DWG 模型坐标转换为 Autodesk Forge 查看器坐标

    我正在尝试在 Autodesk forge 查看器中显示的模型上显示一个点 但是我无法弄清楚如何改变这一点 答案在 Autodesk Forge Viewer 中对齐坐标系 https stackoverflow com questions
  • 在 Autodesk Viewer 中查找可见零件的中心点

    请原谅这个问题的模糊性 但是在查看器的模型中 我想知道如何建立可见部分的中心点 当我在带有隐藏部分的模型上调用 fit to view 时 我可以看到查看器中出现一个点 它似乎恰好代表了这一点 可见部分的中心 如何在代码中检索该点的坐标 小

随机推荐