离线html集成说明
1. 概要说明
支持对以下3D轻量化数据、2D轻量化数据、子件转换轻量化数据进行离线html转换。
- 支持转换为PC端、APP端、PC+APP端兼容 类型离线浏览html
- 支持携带批注信息转换
- 支持携带视图信息转换
- 支持设置显示隐藏模型转换
2. 集成业务场景
2.1 文件结构
插入离线html转换的文件是一个zip格式的压缩包,其文件格式如下:

- 0文件夹、Configurations.json:轻量化模型文件信息
- viewerConfig.json:存放批注数据、隐藏模型信息、视图信息
viewerConfig.json信息说明 :
在轻量化预览页面,添加需要的批注后,打开页面调试工具,在Console面板下,调用nd_viewCtrl相关方法获取需要的信息,并保存到json文件中 。注意文件使用utf-8格式保存
viewerConfig.json文件结构如下 :
{
"viewerPorts":[], //视图数据,js调用nd_viewCtrl.nd_getViewportList方法可以获取当前视图信息。
"modelTags":[], //批注数据 ,js调用nd_viewCtrl.nd_getAllTags方法可以获取当前批注。
"hideParts":[] //隐藏模型,js调用nd_viewCtrl.nd_getHideObjectidLists方法可以获取隐藏部件objectId集合信息。
}
2.2 业务接口接入处理步骤
- 准备转换数据zip文件。
- 获取minio临时上传url,参考API-模型上传-GetPresignedUploadUrl。
- 使用minio临时上传url上传zip文件至miniol,参考API-模型上传-使用临时授权接口上传文件。
- 插入子件转换任务,参考API-插入任务-InsertPartConvertAddTask。
- 查询任务信息,参考API-查询任务-QueryTask。
- 使用查询任务中 outputNdsFiles 信息,base64解密后获取下载离线html文件url地址。
2.3 Java SDK调用示例
package com.newdim.demo;
import com.newdim.sdk.YunapiClient;
import com.newdim.sdk.models.*;
import org.json.JSONObject;
public class demo {
public static void main(String[] args) {
// String localFile = "F:\\temp\\3D.step";
//本地插入文件名
String localFile = "F:\\temp\\model.zip";
//轻量化文件下载保存路径文件夹
String saveFile = "F:\\temp\\download";
//初始化celient partnerID, secretKey,apiServer
String partnerID = "xx";企业ID
String secretKey = "xx";密钥
String apiServer = "https://api.3dopen.cn";接口地址
YunapiClient yunapiClient = new YunapiClient(partnerID,secretKey,apiServer);
{
//离线html转换任务
InsertHtmlConvertTaskBaseRequest insertTaskRequest = new InsertHtmlConvertTaskBaseRequest();
insertTaskRequest.viewerType = 1; //转换类型 1: 3D轻量化 2: 2D轻量化 默认1
//insertTaskRequest.htmlType = 0;//默认为0,0:PC 1:APP 2:PC和APP混合支持
InsertTaskResponse res = yunapiClient.InsertHtmlConvertTaskLocalFile(localFile,insertTaskRequest);
System.out.println(res.taskID);
if(res.taskID > 0){
try {
//查询任务
BaseTaskResponse info = yunapiClient.QueryTask(res.taskID);
while (info.getCode() == 1 && info.status < 2){
info = yunapiClient.QueryTask(res.taskID);
Thread.sleep(2*1000);
}
if(info.status == 2){
System.out.println("在线预览地址" + info.previewURL);
//下载轻量化数据
ResultStatus rs = yunapiClient.DownloadNdsFile(info.outputNdsFiles,saveFile);
System.out.println("下载code:"+rs.getCode() + " msg:" + rs.getMsg());
}
}catch (Exception e) {
System.out.println("error:"+e.getMessage());
}
}
}
}
2.4 C# SDK调用示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YunApiSDK;
using YunApiSDK.Model.Request;
namespace YunApiSDKDemo
{
public class YunApiTest
{
public async Task Test()
{
string partnerID = "xx";企业ID
string secretKey = "xx";密钥
string apiServer = "https://api.3dopen.cn";接口地址
// 参数分别为门户网站中 开发接口-接口信息 中的企业ID、密钥、接口地址
var yunapiClient = new YunApiClient(partnerID, secretKey, apiServer);
var filePath = "F:\\model.zip";
var fileInfo = new FileInfo(filePath);
// 获取minio临时上传URL
var tempUrlRes = await yunapiClient.GetPresignedUploadUrlAsync(new GetPresignedUrlRequest { FileName = fileInfo.Name });
if (tempUrlRes.Status.Code != 1)
{
await Console.Out.WriteLineAsync(tempUrlRes.Status.Msg);
return;
}
// 使用minio临时授权URL上传文件
var uploadRes = await yunapiClient.UploadFileByNdsFileUrlAsync(tempUrlRes.Data.Url, filePath);
// 回调接口地址,如果需要回调则配置,不需要则不配置,地址为实际业务中开发的回调接口地址,本例为YunApiSDKCallbackDemo中的测试接口
// 插入任务
var insertRes = await yunapiClient.InsertHtmlConvertTaskAsync(new InsertHtmlConvertTaskRequest { InputNdsFile = tempUrlRes.Data.InputNdsFile, InputFileType = 0, ViewerType = 1 });
if (insertRes.Status.Code != 1)
{
await Console.Out.WriteLineAsync(insertRes.Status.Msg);
return;
}
var taskState = 0;
var outputDataUrl = string.Empty;
// 此处使用while循环是为了得到轻量化文件下载地址,演示下载文件,实际情况可根据业务调整
while (taskState < 2)
{
// 查询接口
var queryRes = await yunapiClient.QueryTaskAsync(new QueryTaskRequest { TaskID = insertRes.Data.TaskID });
if (queryRes?.Status?.Code != 1)
{
break;
}
taskState = queryRes.Data?.Status ?? 5;
outputDataUrl = queryRes.Data?.OutputNdsFiles;
}
// 此段是演示下载轻量化文件,可根据实际情况自行调整
if (taskState == 2 && !string.IsNullOrEmpty(outputDataUrl))
{
var decodeUrl = Encoding.UTF8.GetString(Convert.FromBase64String(outputDataUrl));
// 此处是获取url中的文件名,可根据自己实际业务情况,确定要保存的文件名
Uri uri = new Uri(decodeUrl);
string fileName = System.IO.Path.GetFileName(uri.LocalPath);
// 简单使用,演示功能,最佳实践使用IHttpClientFactory.CreateClient()创建
var httpClient = new HttpClient();
using (HttpResponseMessage response = await httpClient.GetAsync(decodeUrl))
{
if (response.IsSuccessStatusCode)
{
using (var fileStream = await response.Content.ReadAsStreamAsync())
using (var outputFileStream = System.IO.File.Create(fileName))
{
await fileStream.CopyToAsync(outputFileStream);
}
Console.WriteLine("文件下载成功!");
}
else
{
Console.WriteLine("请求失败: " + response.ReasonPhrase);
}
}
}
}
}
}