// 异步加载
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. Golang-Study

    Golang-Study-Note 参考教程视频:狂神说 https://www.bilibili.com/video/BV1ae41157o9?p=1&vd_source=793668372 ...

  2. Mybatis动态SQL语句大全

    读完这篇文章里你能收获到 Mybatis动态SQL语句大全 Mybatis中如何定义变量 Mybatis中如何提取公共的SQL片段 1. If 语句 需求:根据作者名字和博客名字来查询博客!如果作者名 ...

  3. Gradle 安装配置

    1 下载 官网各版本下载地址如下: https://gradle.org/releases/ 2 安装 将下载后的压缩包(此处以 gradle-6.5-all.zip 为例)解压到某个目录进行安装. ...

  4. ABAP链接FTP把txt文件数据获取到内表

    啥都不说,直接上代码 ******* 如果无法链接FTP,可能需要往表SAPFTP_SERVERS加入IP地址和端口(21)即可 DATA:p_host TYPE char64 VALUE 'IP', ...

  5. 像MIUI一样做Zabbix二次开发(1)——MIUI之于Android,乐维监控之于Zabbix

    摘要 文章主要介绍:7年做Zabbix二次开发,讲述那些从技术方向的选择,到开发.架构设计.深度定制,到我们的更多前瞻性想法. 关于MIUI "专注.极致.口碑.快"成了雷布斯的口 ...

  6. 面试题-react

    对react的理解 是什么 React 是一个用于构建用户界面的 JavaScript 库. 能干什么 可以通过组件化的方式构建大型的,快速响应的大型web应用 如何做 声明式 React 使用jsx ...

  7. abc289g题解

    考虑枚举卖出的物品个数\(i\),把\(b_i\)从大到小排序. 题目的某人会买物品的条件转化为\(b_i\geq p_j-c_j\),这说明卖出的物品的集合是排序后\(b\)的一段前缀,且卖出\(i ...

  8. 供配电一次测 PT柜 解释

    文章来源: PT柜_百度百科 (baidu.com)  视频介绍 很多电工不清楚的高压PT柜,老电工带你了解工作原理和作用_搜狐汽车_搜狐网 (sohu.com) 很多电工怕PT柜,今天电气成套设计实 ...

  9. JAVA笔记:double四舍五入并保留两位小数的方法

    1.只要输出结果 double x1 = 0.026; System.out.println(String.format("%.2f", x1)); 2.数据转换 //方案一: g ...

  10. javaSE-验证码生成

    一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...