Autodesk Data Management API - 获取图像响应 returns 二进制文件。怎么办?

Autodesk Data Management API - Get Image response returns binary. Now What?

所以使用 https://developer.api.autodesk.com/oss/v2/buckets/:bucketKey/objects/:objectName 和 javascript - 我返回了一个无法保存的二进制图像。我用过 fs、btoa、base64 和其他几个,但所有保存的文件都出现无法识别格式的错误。

Image Error 无论我尝试什么,我都会收到此错误,除非我使用邮递员并使用 saveas。我一直在寻找为什么这在邮递员中有效,但我似乎找不到任何可靠的答案。所以

这就是我的

try {
        var data = null;
        var access_token = JSON.parse(Atoken);
        var settingspho = {
            "url": "https://developer.api.autodesk.com/oss/v2/buckets/wip.dm.prod/objects/" + urnid,
            "method": "GET",            
            "timeout": 0,
            "headers": {
                "Authorization": "Bearer " + access_token.access_token,
                "Content-Type": "application/json"                
            },
        };

        $.ajax(settingspho).done(function (response, body) {

           

           var data = 'data:image/jpeg;base64,' + btoa(response);
           \ tried this too \var buf = new Buffer(data, 'base64');
            

            const jsonfile = './photos/' + urnid;
            
          
            fs.writeFile(jsonfile,buf, function (err) {
                if (err) throw err;
            });
            
        });
        
    }    
    catch (err) {
        alert(err);
    }

这是响应的快照Postman Body Response

要使用 jQuery 从 Forge OSS 服务下载二进制数据,您需要 jQuery 的自定义 Ajax 传输,这里有一个适用于您的示例:

顺便说一句,存储在BIM360上的项目的对象名称是基于GUID的,例如。 eae32ae2-ed34-41c2-8cfd-7bb9919fddcb.jpg066edf4c-e546-4cf9-bb6a-4c93968dad00.dwg5df33424-1ee4-49fe-bf0f-8ca5b9642cd1.rvt。您不能直接使用文件名。

所以经过一些修改和 Eason 的 post 下面是如何从 oss 下载文件..

 try {

        var access_token = JSON.parse(Atoken);
        var xhr = new XMLHttpRequest();
        xhr.withCredentials = true;

        xhr.addEventListener("readystatechange", function () {
            if (this.readyState === 4 && this.status === 200) { 

                

                var res = this.response; 
                const jsonfile = './photos/'+ urnid; 
               
                try {
                                                         
                    fs.writeFile(jsonfile, toBuffer(res), function (err) {
                        if (err) throw err;
                    });


                }                               
                 catch (err) {
                     alert(err);
                 }
         
               


            }
        });

        xhr.open("GET", "https://developer.api.autodesk.com/oss/v2/buckets/wip.dm.prod/objects/" + urnid,);
        xhr.setRequestHeader("Authorization", "Bearer " + access_token.access_token);
        xhr.setRequestHeader("Content-Type", "application/octet-stream");
        xhr.responseType = 'arraybuffer';
        xhr.send();

        

       
        
    }    
    catch (err) {
        alert(err);
    }
};

function toBuffer(ab) {
    var buf = Buffer.alloc(ab.byteLength);
    var view = new Uint8Array(ab);
    for (var i = 0; i < buf.length; ++i) {
        buf[i] = view[i];
    }
    return buf;
}