【发布时间】: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