【问题标题】:Autodesk forge file translation to svf not workingAutodesk 将文件转换为 svf 不起作用
【发布时间】:2020-09-24 21:48:33
【问题描述】:

我目前正在关注 Autodesk forge 上的为查看器准备文件教程。这是链接: https://forge.autodesk.com/en/docs/model-derivative/v2/tutorials/prep-file4viewer/ 我没有使用 cURL 发出请求,而是使用 jquery ajax 制作了 javascript 代码来发出请求。我将每个请求都设为一个函数,并带有一个按钮来触发每个请求,如下代码所示。目前,每个请求都可以正常工作,除了转换为 svf 请求。当我尝试发出该请求并检查我的请求状态时,将打印以下消息:

    {
"urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6cHJvamVjdGZpbGVzMTIzNC9fTUMtMTQwMDYlMjBGT0xERVIlMjBBU1NZJTIwLSUyMEhTQ0YtMTIuaWFtLmR3Zg",
"derivatives": [{
    "hasThumbnail": "false",
    "name": "_MC-14006 FOLDER ASSY - HSCF-12.iam.dwf",
    "progress": "complete",
    "messages": [{
        "type": "error",
        "code": "DWF2D-Not_A_DWF_Error",
        "message": "Unable to open, not a DWF/DWFx file."
    }, {
        "type": "error",
        "message": "Extractor error code -11",
        "code": "TranslationWorker-InternalFailure"
    }],
    "outputType": "svf",
    "status": "failed"
}],
"hasThumbnail": "false",
"progress": "complete",
"type": "manifest",
"region": "US",
"version": "1.0",
"status": "failed"

使用邮递员,我可以提出相同的请求,一切都会正常进行。然后,当我尝试再次翻译文件时,只要它来自同一个存储桶,它就可以工作。我需要能够立即从代码上传和翻译文件,而不必先在邮递员中翻译。我什至试图复制翻译请求的邮递员代码,但是当文件不在我的存储桶中时,我得到了同样的错误。下面是我的简单网页代码。

<html>
<title>Viewer</title>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/jstree.min.js"></script>

<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" />
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css" type="text/css">
    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script>
    <style>
        body {
            margin: 0;
        }
        #forgeViewer {
            width: 100%;
            height: 100%;
            margin: 40px;
            background-color: #F0F8FF;
        }
    </style>
</head>
<script>
//variable declaration
var access_token='';
const bucketKey = 'projectfiles123874';
const policyKey = 'transient';
var urn1 = '';
var urn2 = '';
var urn3 = '';
//var fileName = '_MC-14006 FOLDER ASSY - HSCF-12.iam.dwf';
var fileName = '';

if(access_token == ''){
getToken();
}

function getToken(){
    $.ajax({
        method: 'POST',
        url: 'https://developer.api.autodesk.com/authentication/v1/authenticate',
        headers: {
            'content-type': 'application/x-www-form-urlencoded',
        },
        data: 'client_id=lAOwCkVLo307t4fxWdEriDrPs1CAhdMl&client_secret=AhWJ5cIrm6Lh65AB&grant_type=client_credentials&scope=data:read data:write bucket:read viewables:read bucket:create data:create',
        success:function(response){
            access_token=response.access_token;
            console.log(response);
            console.log(access_token);
        },
        error:function(error){
            console.log(error);
        }
    }) 
}

function createBucket(){
    $.ajax({
        method: 'POST',
        url: "https://developer.api.autodesk.com/oss/v2/buckets",
        headers:{
            "content-type": "application/json",
           // "x-ads-force":true,
            Authorization: "Bearer " + access_token
        },
        data: JSON.stringify({
            'bucketKey': bucketKey,
            'policyKey': policyKey
        }),

        success:function(response){
            console.log(response);

            //window.location.href = "http://team/www/upload.html";

        },
        error:function(error){
            if (error.response && error.response.status == 409){
                console.log("bucket alrready exists, skipping creation.");
            }
            else{
                console.log("failed to create new bucket.");
            }
        }
    })
}

function uploadFile(){

    $.ajax({
        method: 'PUT',
        url:"https://developer.api.autodesk.com/oss/v2/buckets/"+encodeURIComponent(bucketKey)+"/objects/"+encodeURIComponent(fileName)+"",
        data: 'C:\Users\matthew_vidovic\Desktop\DWGs\_MC-7251 CLOROX CARTON FORMER.iam.dwf',
        headers:{
            Authorization: "Bearer " + access_token
        },
        success:function(response){
            console.log(response);
           urn1 = response.objectId;
           console.log(urn1);
            urn2 = btoa(urn1);
            console.log(urn2);
        },
        error:function(error){
            console.log(error);
        }
    })
}

function translateToSVF(){

    $.ajax({
        method: 'POST',
        url:"https://developer.api.autodesk.com/modelderivative/v2/designdata/job",
        headers:{
            "content-type": "application/json",
            Authorization: "Bearer " + access_token
        },
        data:JSON.stringify({
            "input":{ "urn":urn2

            },
            "output":{ "destination":{
                "region": "us"
            },
                    "formats": [
                        {
                            "type": "svf",
                            "views": [
                                "2d",
                                "3d"
                            ]
                        }
                    ]
            }
        }),
        success:function(response){
            console.log(response);
            urn3=response.urn;
            console.log(urn3);
           // console.log(access_token);
        },
        error:function(error){
            console.log(error);
        }
    })
/*    POSTMAN REQUEST CODE
    var settings = {
  "url": "https://developer.api.autodesk.com/modelderivative/v2/designdata/job",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Cookie": "PF=5aKDLaxVErxdqJY5p40NQy",
    Authorization: "Bearer " + access_token
  },
  "data": JSON.stringify({"input":{"urn":urn2,"rootFilename":fileName,"compressedUrn":false},"output":{"destination":{"region":"us"},"formats":[{"type":"svf","views":["2d","3d"]}]}}),
};

$.ajax(settings).done(function (response) {
  console.log(response);
  urn3 = response.urn;
  console.log(urn3);
});
*/
}



function checkStatus(){
    $.ajax({
        method: 'GET',
        url: "https://developer.api.autodesk.com/modelderivative/v2/designdata/" + encodeURIComponent(urn3) + "/manifest",
        headers:{
            Authorization: "Bearer " + access_token
        },
        success: function(response){
            console.log(response);
        },
        error: function(error){
            console.log(error);
        }
    })
}

    /*
    if(access_token == ''){
        getToken();
    }
    else if(urn1 == ''){
        uploadFile();
    }
    else translateToSVF();
    */
    function displayViewer(){
var viewer;
var options = {
    env: 'AutodeskProduction',
    api: 'derivativeV2',  // for models uploaded to EMEA change this option to 'derivativeV2_EU'

    getAccessToken: function(onTokenReady) {

        var token = access_token;
        var timeInSeconds = 3600; // Use value provided by Forge Authentication (OAuth) API
        onTokenReady(token, timeInSeconds);
    }
};

Autodesk.Viewing.Initializer(options, function() {

    var htmlDiv = document.getElementById('forgeViewer');
    viewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv);
    var startedCode = viewer.start();
    if (startedCode > 0) {
        console.error('Failed to create a Viewer: WebGL not supported.');
        return;
    }

    console.log('Initialization complete, loading a model next...');

});

var documentId = 'urn:'+urn3;
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);

function onDocumentLoadSuccess(viewerDocument) {
    var defaultModel = viewerDocument.getRoot().getDefaultGeometry();
    viewer.loadDocumentNode(viewerDocument, defaultModel);
}

function onDocumentLoadFailure() {
    console.error('Failed fetching Forge manifest');
}

}
/*
function check(){
    if (access_token='') getToken
}
*/

function processSelectedFiles(fileInput) {
  var files = fileInput.files;

  for (var i = 0; i < files.length; i++) {
   // alert("Filename " + files[i].name);
    fileName = files[i].name;
    console.log(fileName);
  }
}


</script>
<body><h1>Model Viewer</h1>
<p><button onclick="getToken()">Get Token</button></p>
<p><button onclick="createBucket()">Create Bucket</button></p>
<p><button onclick="uploadFile()">upload file</button></p>
<p><button onclick="translateToSVF()">Translate</button></p>
<p><button onclick="checkStatus()">Check Status</button></p>
<p><button onclick="displayViewer()">display Viewer</button></p>
<p><input type="file" id="input" onchange="processSelectedFiles(this)"></p>

<div id="forgeViewer"></div>

</body>
</html>

任何关于为什么会发生这种情况的帮助将不胜感激。 干杯!

【问题讨论】:

    标签: autodesk-forge autodesk-model-derivative


    【解决方案1】:

    您的PUT 没有指定文件名,只是指定了一个文件夹,因此可能上传已损坏。此外,您无需提供content-type

    该文件必须由用户选择,您的浏览器应用无权访问本地文件夹结构。您可以创建一个input 文件或form,然后将其传递给data 字段

        method: 'PUT',
        url:"https://developer.api.autodesk.com/oss/v2/buckets/"+encodeURIComponent(bucketKey)+"/objects/"+encodeURIComponent(fileName)+"",
        data: theForm.theInput.files[0],
        headers:{
            Authorization: "Bearer " + access_token
        },
    

    您可以通过SHA-1 签名验证您的下载,或者更简单地比较本地和实时(存储桶内)的文件大小。

    【讨论】:

    • 您好,Augusto,感谢您的帮助我已更改数据:也包含我的文件名。现在,当翻译开始时,我的进度状态为 0%,但是当我再次检查进度时,它再次失败。留下相同的错误代码。还有什么我应该尝试的。如果您能偶然运行我的代码并查看是否遇到相同的错误,将不胜感激。再次感谢你的帮助! @Augusto Goncalves
    • 能否用您最近的更改更新您的问题?
    • 我刚刚用小改动更新了我的代码,将文件名添加到末尾。我也尝试过只使用文件名,但是两者都没有奏效。完全相同的请求在邮递员中工作。我什至尝试复制确切的邮递员代码但没有成功。问题是否与我使用 xampp 作为我的服务器有关。我只是试图一次上传一个文件,并简单地在查看器中显示它而不使用 express。再次感谢您的帮助! @Augusto Goncalves
    • 这是邮递员用于 PUT 请求的内容。 "data": ""
    • 我发现当我发送我的 PUT 请求时,响应如下: bucketKey: "teamviewer" contentType: "application/octet-stream" location: "developer.api.autodesk.com/oss/v2/buckets/teamviewer/objects/…" objectId: "urn: adsk.objects:os.object:teamviewer/_MC-14006FOLDERASSY-HSCF-12.iam.dwf" objectKey: "_MC-14006FOLDERASSY-HSCF-12.iam.dwf" sha1: "da39a3ee5e6b4b0d3255bfef95601890afd80709" size: 0 问题显然是这样的大小为零。我该如何解决这个问题。
    猜你喜欢
    • 2021-11-06
    • 2021-01-21
    • 2020-07-15
    • 2021-02-05
    • 2016-10-25
    • 2018-01-12
    • 2020-02-13
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多