// 异步加载
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. 力扣51. N 皇后(回溯法)

    按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回 ...

  2. ssl自动更新证书

    安装证书 yum install certbot 更新证书之前先开启80 443 端口 自动生成证书certbot certonly --standalone --agree-tos -n -d ww ...

  3. x264码率控制

    1. x264 1.1 preset 的参数主要调节编码速度和质量的平衡,有ultrafast.superfast.veryfast.faster.fast.medium.slow.slower.ve ...

  4. Linux 文件编码操作enca[适用Mac]

    查看文件编码: enca file.csv 修改文件编码 enca -x UTF-8 file.csv

  5. 记录解决方案(sqlserver篇)

    一个月的补卡次数不超过三次(即统计一个月内某人的补卡次数) 表结构是某人一天内的四次打卡状态,这样是统计当月补卡的天数了(错误) select count(*) from [Proc_HR_Punch ...

  6. vue本地运行项目使用iframe的跨域问题

    1.获取iframe中的window对象 为了兼容大多数浏览器,应使用iframeElement.contentWindow来获取 https://blog.csdn.net/xiongzhengxi ...

  7. 利用 fastjson 的 toJSONStringWithDateFormat 方法,将Date 格式化 为常见类型的时间

    利用 fastjson 的 toJSONStringWithDateFormat 方法,将Date 格式化 为常见类型的时间 JSON.toJSONStringWithDateFormat(nrcSt ...

  8. mybatis获取参数值的方式

     示例: 总结:  

  9. node_exporter安装

    1.node_exporter下载 node_exporter-1.3.1.linux-amd64.tar.gz tar -xzvf node_exporter-1.3.1.linux-amd64.t ...

  10. macOS 10.14安装win10教程 bootcamp篇

    由于工作以及系统使用习惯上的原因,拥有Mac电脑的用户常常需要用到windows系统,这个时候我们就需要在Mac上安装双系统来满足这一需求,一起来看看macOS 10.14安装win10教程吧. ma ...