【问题标题】:Model Derivative + new directToS3 + convert to SVF2 silent fail模型导数 + 新的 directToS3 + 转换为 SVF2 静默失败
【发布时间】:2022-10-21 16:11:27
【问题描述】:

我有一些桶,我已经上传了一些 AutoCAD 图纸。我已经转换为使用 directToS3 方式上传文件,我可以在 OSS 存储桶中看到这些文件的 URN。但是,当我尝试将文件转换为 SVF 或 SVF2 时,将 bucketID 和 URN 传递给存储桶中的文件,这些文件并没有转换为 SVF,它只是默默地失败了。

[HttpPost]
[Route("oss/uploadObject")]
public async Task<dynamic> UploadObject([FromForm]UploadFile input)
{
    // save the file on the server
    var uploadFolder = Path.Combine(Environment.CurrentDirectory, "Uploads");
    if (!Directory.Exists(uploadFolder))
        Directory.CreateDirectory(uploadFolder);
    
    var fileSavePath = Path.Combine(uploadFolder, Path.GetFileName(input.fileToUpload.FileName));

    dynamic uploadedObj;
    using (var stream = new FileStream(fileSavePath, FileMode.Create))
    {
        await input.fileToUpload.CopyToAsync(stream);
        uploadedObj = await BinarytransferClient.UploadToBucket(    input.bucketKey,
                                                                    Path.GetFileName(input.fileToUpload.FileName),
                                                                    stream);
    }

    // cleanup, don't leave the binary on the server
    System.IO.File.Delete(fileSavePath);
    return uploadedObj;
}

文件上传是通过this URL 上的 forge-DirectToS3/BinaryTransferClient 处理的,我唯一的改变是令牌的传递方式,因为我已经有了自己的库。上传后查询OSS Bucket,结果如下:

[
  {
    "id": "weuwb5gtwqzvqiykmpvhh8fj2zhslnfk-test1",
    "text": "test1",
    "type": "bucket",
    "hasChildren": true,
    "drawings": [
      {
        "id": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6d2V1d2I1Z3R3cXp2cWl5a21wdmhoOGZqMnpoc2xuZmstdGVzdDEvNjExNTEwLmR3Zw==",
        "text": "611510.dwg",
        "type": "drawing",
        "hasChildren": false,
        "drawings": null,
        "project": null
      }
    ],
    "project": null
  },
  {
    "id": "weuwb5gtwqzvqiykmpvhh8fj2zhslnfk-test2",
    "text": "test2",
    "type": "bucket",
    "hasChildren": true,
    "drawings": [
      {
        "id": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6d2V1d2I1Z3R3cXp2cWl5a21wdmhoOGZqMnpoc2xuZmstdGVzdDIvNjA1NzAyLmR3Zw==",
        "text": "605702.dwg",
        "type": "drawing",
        "hasChildren": false,
        "drawings": null,
        "project": null
      }
    ],
    "project": null
  },
  {
    "id": "weuwb5gtwqzvqiykmpvhh8fj2zhslnfk-test4",
    "text": "test4",
    "type": "bucket",
    "hasChildren": true,
    "drawings": [
      {
        "id": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6d2V1d2I1Z3R3cXp2cWl5a21wdmhoOGZqMnpoc2xuZmstdGVzdDQvODgxMTYuZHdn",
        "text": "88116.dwg",
        "type": "drawing",
        "hasChildren": false,
        "drawings": null,
        "project": null
      }
    ],
    "project": null
  },
  {
    "id": "weuwb5gtwqzvqiykmpvhh8fj2zhslnfk638009921667451964-test3",
    "text": "weuwb5gtwqzvqiykmpvhh8fj2zhslnfk638009921667451964-test3",
    "type": "bucket",
    "hasChildren": true,
    "drawings": [
      {
        "id": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6d2V1d2I1Z3R3cXp2cWl5a21wdmhoOGZqMnpoc2xuZms2MzgwMDk5MjE2Njc0NTE5NjQtdGVzdDMvNjExNTEwLmR3Zw==",
        "text": "611510.dwg",
        "type": "drawing",
        "hasChildren": false,
        "drawings": null,
        "project": null
      }
    ],
    "project": null
  }
]

最后,转换代码:

[HttpPost]
[Route("modelderivative/TranslateObject")]
public async Task<dynamic> TranslateObject([FromBody] TranslateObjectModel objModel)
{
    dynamic oauth = await OAuthController.GetInternalAsync();

    // prepare the payload
    List<JobPayloadItem> outputs = new List<JobPayloadItem>()
    {
        new JobPayloadItem(
            JobPayloadItem.TypeEnum.Svf2,
            new List<JobPayloadItem.ViewsEnum>()
            {
                JobPayloadItem.ViewsEnum._2d,
                JobPayloadItem.ViewsEnum._3d
            })
    };
    JobPayload job;
    job = new JobPayload(new JobPayloadInput(objModel.objectName), new JobPayloadOutput(outputs));

    // start the translation
    DerivativesApi derivative = new DerivativesApi();
    derivative.Configuration.AccessToken = oauth.access_token;
    dynamic jobPosted = await derivative.TranslateAsync(job, true);
    return jobPosted;
}

/// <summary>
/// Model for TranslateObject method
/// </summary>
public class TranslateObjectModel
{
    public string bucketKey { get; set; }
    public string objectName { get; set; }
}

传递上面的任何 bucketKey、objectID 组合都不会产生任何结果。我从后端获得了成功,但我没有实际的衍生产品,或者如果我这样做,我不知道 URL 是什么。我到底错过了什么?也许我需要再次调用以从其他位置/API 调用中为 SVF 获取不同的 URN?

【问题讨论】:

  • 更多信息,看起来我的上传可能会破坏文件。 ``` "type": "error", "message": "Unrecoverable exit code from extractor: -1073741831", "code": "TranslationWorker-InternalFailure" "1": { "type": "error", "code ": "AutoCAD-InvalidFile", "message": "抱歉,绘图文件无效,无法查看。\n- 请尝试在 AutoCAD 中恢复文件,然后重新上传查看。"

标签: autodesk-forge autodesk-viewer autodesk-model-derivative


【解决方案1】:

当手动上传的文件翻译失败时,有助于(1)确认上传对象的字节大小与原始文件的大小匹配,以及(2)下载上传的文件并检查内容是否正确。

另外,请注意,我们的 SDK 现在包含 direct-s3 上传/下载功能,因此您可以从那里使用它:https://forge.autodesk.com/blog/direct-s3-upload-and-download-sdks

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2021-04-25
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多