// 异步加载
const LoadObj = async (key?: string) => {
LoadState.value = true
var objStr, mtlStr
var imgStrObj = {}
let len = 0 const zp: any = (await getoBJList({ key })).data JSZip.loadAsync(zp).then(function (zip) {
zip.forEach((relativePath: string, file: JSZip.JSZipObject) => {
try {
len++
let blobs = false
if (file.name.indexOf('.obj') > 0 || file.name.indexOf('.mtl') > 0)
blobs = true zip
.file(file.name)
.async(blobs ? 'text' : 'base64')
.then(
function success(text) {
len-- if (file.name.indexOf('.obj') > 0) objStr = text
else if (file.name.indexOf('.mtl') > 0) mtlStr = text
else
ht.Default.setImage(
file.name,
(imgStrObj[file.name] = 'data:image/png;base64,' + text)
)
if (len <= 0) {
try {
dataModel.clear() var rawS3 = parseObj('2121', objStr, mtlStr, imgStrObj) var node = new ht.Node()
node.s({
shape3d: '2121',
'3d.selectable': false
})
node.s3(rawS3)
node.p3(0, rawS3[1] / 2, 0)
dataModel.add(node)
var sz = node.getSize3d()
var sa = node.getScale3d()
graphView.setNear(
Math.floor(
Math.min(sz[0] * sa[0], sz[1] * sa[1], sz[2] * sa[2])
)
)
graphView.setFar(
Math.floor(
Math.max(sz[0] * sa[0], sz[1] * sa[1], sz[2] * sa[2])
) * 10
)
graphView.flyTo(node, true)
LoadState.value = true
} catch {
ElMessage.error(i18n.global.t('message.Objerr'))
LoadState.value = false
}
}
},
function error(e) {
len--
console.log(e)
}
)
} catch {
ElMessage.error(i18n.global.t('message.Objerr'))
LoadState.value = false
}
})
})
}

import { DownGet } from '/@/type/config/down'
const api = {
getoBJList: '/admin/down/obj', // 获取模型 }
// 下载模型文件
export function getoBJList(param: DownGet): Promise<AxiosResponse<IResponse>> {
return request({
url: api.getoBJList,
method: 'post',
data: param,
responseType: 'blob'
})
}
// 下载请求
export interface DownGet {
key: string
}
   /// <summary>
/// 读取文件
/// </summary>
/// <param name="Name"></param>
/// <param name="path"></param>
/// <returns></returns>
private FileStreamResult DownloadFile(string Name, string key, string path = null)
{
if (string.IsNullOrEmpty(path))
path = $"{Directory.GetCurrentDirectory()}/wwwroot"; //Determine the Content Type of the File.
string contentType = "";
new FileExtensionContentTypeProvider().TryGetContentType(Name, out contentType); //Build the File Path.
path = Path.Combine(path, Name); //Read the File data into FileStream.
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); //Send the File to Download.
return new FileStreamResult(fileStream, contentType) { FileDownloadName = key };
} /// <summary>
/// 下载obj模型
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[HttpPost("obj"), Authorize] public IActionResult DownoBJ(XJDataDll.DataHttp.Admin.Down.Select obj)
{ try
{
var model = (from v in _dbcontext.company_models.Where(o => obj.key.Equals(o.key)).OrderBy(v => v.index) select v).FirstOrDefault(); FileStreamResult files = DownloadFile(model.path,model.key); return files;
}
catch
{
return NotFound();
} }

WebApi 下载三维zip文件并预览的更多相关文章

  1. C# WebAPI 文件在线预览

    最近在写一个移动端API接口,其中有一个需求:接口返回附件url地址让手机端调用实现文件在线预览.大体实现思路:把doc.xls等文本格式文件转换为pdf,转换后的pdf文件存放在服务器上面,方便第二 ...

  2. asp.net word ecxel类型文件在线预览

    asp.net word ecxel类型文件在线预览 首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Libr ...

  3. 【ASP.NET 进阶】PDF文件在线预览(类似百度文库)

    工作需要完成文档的在线预览,现在完成了第一步PDF文件的预览,步骤是通过PDF转换工具pdf2swf.exe把PDF文件转换为SWF文件,然后通过FlexPaper就可以预览了.效果如下(GIF图片太 ...

  4. 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...

  5. office文件的预览

    使用FlexPaper实现office文件的预览(C#版) 需求很简单,用户上传office文件(word.excel.ppt)后,可以预览上传的这些文件.搜索的相关的资料后.整理如下: Step1. ...

  6. 关于confluence上传文件附件预览查看时出现乱码的问题解决办法

    在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...

  7. confluence上传文件附件预览乱码问题(linux服务器安装字体操作)

    在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...

  8. kkfileview v2.0 发布,文件在线预览项目方案

    kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...

  9. JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

    前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <he ...

  10. Java实现文件的预览

    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法.我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365 使用 ...

随机推荐

  1. -bash: nslookup: 未找到命令;centos7 安装nslookup

    一.安装服务 [root@localhost ~]# yum -y install bind-utils 二.查看 [root@localhost ~]# nslookup

  2. yolov5学习遇到的困难

    本文观看目标检测 YOLOv5 开源代码项目调试与讲解实战[土堆 x 布尔艺数]_哔哩哔哩_bilibili视频来部署yolov5环境. 问题1:pycocotools工具包安装问题,参照视频2解决W ...

  3. ACCESS中查询语句:查询所得数据另存到一个指定目录下的文件夹里,并新建新的文件

    select * into [excel 8.0 database=d:\aa.xls].sheet1 from bb where bb.cc="dd" excel 8.0 为什么 ...

  4. 监控本机环境生成SQL脚本

    在开发工作中我们客户端连接 测试服务器开发工作,往往很多人操作数据库,如何甄别出自己操作 方法一: 在程序配置节点设置App节点,譬如: <add name="ModelEntitie ...

  5. 【转】关于 Nokogiri 的安装依赖 libxml2安装问题

    来源:https://ruby-china.org/topics/30243 在自己的os x系统上一直运行正常,包括正常使用nokogiri这个gem,今天 在本地建立新项目,bundle inst ...

  6. JSP课设:学生选课系统(附源码+调试)

    JSP学生选课管理系统学生选课管理系统功能概述(1)登录模块分为两种角色:学生角色.教师角色 (2)教师模块:选课管理功能为对课程信息(课程编号.名称.学分)进行添加.修改.删除操作:学生信息功能对学 ...

  7. 使用CMD创建任意文件

    C:\>fsutil file createnew 用法 : fsutil file createnew <文件名> <长度> 范例:fsutil file create ...

  8. SSH 秘钥登入

    1.打开权限 vim /etc/ssh/sshd_config   去掉  PubkeyAuthentication yes  一行的#  2.重启ssh服务 systemctl restart ss ...

  9. linux开机启动执行脚本或命令

    添加到    /etc/rc.d/rc.local    给文件执行权限   /etc/rc.d/rc.local 用于用户自定义开机启动程序,可以往里写开机要执行的命令或脚本,线上的配置如下: [r ...

  10. docker (mysql 8.+ )主从同步

    1.环境centos7.5  docker 2.下载docker 版本的mysql 启动容器 docker run --name mysql_master -p 3306:3306 -e MYSQL_ ...