收集实现代码

首先,需要一个显示stl的前端实现。因为是前端代码,并且是显示比较主流的3D文件,所以肯定是已经有相应的实现,所以我们要做的就是找到相应的实现,然后在上面做相应的修改即可。笔者参考的是以下这个stl免费在线查看工具:free online STL viewer.因为这个工具已经标注了完全在本地运行,所以我们肯定能够通过这个网站的前端源码实现我们的需求。

下载源码

新建文件夹stlShow,在上面的网页下ctrl+s保存代码到此文件夹。此时我们可以看到在其js文件夹下所有的js文件都是.下载结尾了,我们首先删除.下载后缀,然后打开Free online STL viewer.html,搜索.下载,并删除所有.下载后缀。

后端编写stl文件controller

首先准备一个test.stl文件放在webapp下。

@Controller

public class TestDemonController {

@RequestMapping(value = "/testStl.do")

@ApiOperation(value = "以二进制流的形式传送STL")

public void getTestSTL(HttpServletRequest request, HttpServletResponse response){

FileInputStream fis = null;

String stlPath = request.getSession().getServletContext().getRealPath("")+"test.stl";

//这里的类型,是笔者在调试前端js代码的时候找到的,默认的类型里面没有这一类型,但是此类型是必须要写的

response.setContentType("application/vnd.ms-pki.stl");

out(request,response,fis,stlPath);

}

private void out(HttpServletRequest request, HttpServletResponse response,FileInputStream fis,String path){

try {

OutputStream outputStream = response.getOutputStream();

File file = new File(path);

fis = new FileInputStream(file);

byte[] b = new byte[fis.available()];

fis.read(b);

outputStream.write(b);

outputStream.flush();

} catch (IOException e) {

e.printStackTrace();

}finally {

if(fis!=null){

try {

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

在浏览器中输入your-url/testStl.do,能够下载一个testStl.do文件,将其改名为testStl.stl,上传到最初的那个网站,可以看到效果,说明接口已经正常运行。

拷贝前端代码至你的项目中

将前端代码拷贝到你的web项目中,并根据你拷贝的情况修改js引用路径。

修改前端代码read_internal.js

替换read_internal.js文件中function read_file(f)方法为(具体解释请看注释):

function read_file(stl_url)

{

waiting=true;

var pbar=$id('file_pbar');

var reader = new FileReader();

reader.onerror = function(e)

{

var error_str="";

switch(e.target.error.code)

{

case e.target.error.NOT_FOUND_ERR:

error_str="File not found";

break;

case e.target.error.NOT_READABLE_ERR:

error_str="Can't read file - too large?";

break;

case e.target.error.ABORT_ERR:

error_str="Read operation aborted";

break;

case e.target.error.SECURITY_ERR:

error_str="File is locked";

break;

case e.target.error.ENCODING_ERR:

error_str="File too large";

break;

default:

error_str="Error reading file";

}

alert(error_str);

switch_view('drag');

return after_error();

}

reader.onload = function(e)

{

switch_view('proc');

setTimeout(function(){after_file_load('3D圖片展示', e.target.result)}, 500);

};

reader.onprogress = function(e)

{

if (cancel_download)

{

reader.abort();

return after_error();

}

else

pbar.value=e.loaded / e.total*100;

};

pbar.value=0;

//使用一个回掉函数获取stl文件的二进制流为blob类型

//使用Jquery的$.Ajax方法虽然能得到二进制数据,但是没有类型,甚至不是Array的类型,所以这里采用了这个方式

switch_view('pbar');

var stl;

var xhr = new XMLHttpRequest();

xhr.open('GET', stl_url, true);

xhr.responseType = 'blob';

xhr.onload = function(e) {

if (this.status == 200) {

// get binary data as a response

stl = this.response;

reader.readAsArrayBuffer(stl);//调用原来的方法把stl文件传入

}

};

xhr.send();

}

修改parser.js文件

parser.js文件是用来解析文件类型的,我们通过后端传入的文件因为没有文件名,所以这边会将我们传入的文件判断为不支持的类型,所以,这边我们用一个比较笨的方法,解决这个问题,之后如果需要解析objorvf文件,可以自行修改。这里,我们修改function parse_3d_file(filename, s)函数为:

function parse_3d_file(filename, s)

{

//determine type of file

//console.log(filename.split('.').pop().toLowerCase());

switch (filename.split('.').pop().toLowerCase())

{

case "stl":

return parse_stl_bin(s);

break;

case "obj":

return parse_obj(s);

break;

case "vf":

return parse_vf(arrayBufferToString(s));

break;

default:

return parse_stl_bin(s);//直接调用stl解析

break;

}

}

添加测试按钮

在Free online STL viewer.html中添加按钮點擊獲取3D文件(stl,obj,vf)。测试效果如文章开头所示。

删除掉Free online STL viewer.html中你不需要的代码

stl文件html预览,基于SpringMVC对stl文件的3D可视化相关推荐

  1. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  2. html访问xlsx文件,【html】xlsx文件实现预览,浏览器实现xlsx文件的预览,前端实现xlsx文件的预览...

    ===================================================== 实现xlsx文件预览的快速的解决方案,使用微软提供的接口地址,直接拼接自己文件的url即可 ...

  3. swf文件在线预览 html,在线浏览swf文件

    项目中需要将PPT实现在线浏览的,在网上找了很多资料,大部分都倡导用,格式转为swf,这样的方法来实现在线浏览PPT.所以记录一下这块的代码: pageEncoding="UTF-8&quo ...

  4. vue项目实现前端预览word和pdf格式文件

    最近做vue项目遇到一个需求,就是前端实现上传word或pdf文件后,后端返回文件对应的文件流,前端需要在页面上展示出来.word预览简单一些,pdf预览我试过pdfjs,vue-pdf总是报各种奇奇 ...

  5. 基于SpringBoot的文件在线预览神器,支持99%的文件在线预览

    kkFileView简介 kkFileView可以用来搭建文件在线预览服务,在Github上已有5.7k+Star.该项目使用流行的SpringBoot搭建,易上手和部署,基本支持主流办公文档的在线预 ...

  6. Spring Boot 实现万能文件在线预览,已开源,真香!!

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  7. 万能文件在线预览项目,开源!

    支持 20 多种主流格式的文件在线浏览,这个项目值得学习. 编程导航开源仓库:https://github.com/liyupi/code-nav 大家好,我是鱼皮,今天分享一个优秀的.100% 开源 ...

  8. doc文件在线预览 vue_跨平台(uniapp)文件在线预览解决方案

    一.前言 之前写过一篇文章关于上传目录文件:uni-app系统目录文件上传(非只图片和视频)解决方案,这次来解决文件预览问题. uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者 ...

  9. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库产品的 ...

最新文章

  1. pyglet and opengl -- 纹理映射以及动画
  2. 记录mysql的配置表误删
  3. not support mysql_MYSQL出现quot; Client does not support authentication quot;的解决方法
  4. 【学习Android NDK开发】Java通过JNI调用native方法
  5. LaTeX调整目录的行距
  6. tensorflow入门书籍推荐_架构书籍推荐(入门读)
  7. db2 sqlcode常见及不常见
  8. 计算机网络中netbuie,材料内部空隙体积占其总体积的百分率叫做()。A、孔隙率B、填充率C、空隙率D、密实度...
  9. java 泛型去重_泛型,list集合去重
  10. fastboot刷机工具_小米手机刷机教程整合版
  11. 一款你不容错过的Laravel后台管理扩展包 —— Voyager – Laravel学院
  12. JS中实现继承的几种方式
  13. 企业如何做好品牌推广工作?
  14. POJ 1581 A Contesting Decision
  15. Matlab之绘制瀑布图
  16. C# 之多线程篇 Task(C#超级工具类)
  17. Hadoop,master和slave简单的分布式搭建
  18. JAVA 定时器的Cron表达式详解
  19. linux之getopt 函数
  20. 从异构软件开发者的角度看异构计算

热门文章

  1. instanceof java 报错_java中instanceof怎么理解?java中instanc 爱问知识人
  2. 流放者柯南自建服务器 linux,《流放者柯南》自建服务器教程一览 服务器搭建方法介绍...
  3. 列中的空值违反了非空约束_管理社区中违反准则的情况
  4. 超详细python下简单快速下载opencv
  5. 氟化硼二吡咯(BODIIPY) FL炔烃/氨基/羧基/NHS脂/叠氮/酰胫/马来酰亚胺/四嗪/DBCO
  6. 论文笔记 EMNLP 2020|Resource-Enhanced Neural Model for Event Argument Extraction
  7. android资源收藏
  8. foreign key() references 字段名(字段名)详细用法
  9. 【图像去噪】基于自适应小波阙值算法实现图像去噪附matlab代码
  10. Rockchip基于RK3566/RK3568 WiFi AP6256调试笔记