1、上传、下载
思路如下:
思路一:ftp方案 上传、下载的时候,其实就是先将文件上传到程序所在的服务器,然后再把文件通过ftp推送到指定服务器的指定目录就好了。关于ftp服务器推送,参见https://blog.csdn.net/wangmx1993328/article/details/82150290
思路二:scp方案。ftp那个还需要在每台虚拟化机器上安装ftp服务。有点繁琐。不如直接用scp命令进行拷贝。java调用scp的有很多方法。自行百度,下面是个样例
https://blog.csdn.net/CSDN_Hzx/article/details/85205683
不过这个方案,需要代码所在的服务器以及pve所在的服务器以及pve中的虚拟机都在同一网段。网络是互通的,才能用scp。在现实使用场景中,这个网络环境不太好实现。在机房中不可能随意分配服务器网段的ip。
所以在这个思路之上再次改进,我们可以在pve创建虚拟机的时候,弄一个共享目录。像nfs一样,每个虚拟机中有一个目录,可以映射到pve的指定目录。这样我们就可以直接scp到pve的目录。然后pve中的虚拟机就可以使用dhcp的方式,分配内网ip了
2、剪切板
思路一:
这个功能,比较复杂。可以使用vnc的api进行完成。vnc api中有一个方法如下
vnc api地址:https://www.realvnc.com/pt/developer/docs/latest/api/java/index.html
具体实现,后续补充
其实可以好好学学vnc api好多功能都可以实现。
如果这个接口可以实现客户端往服务器端发送命令,那很多问题就迎刃而解了。
思路二:前端实现
参见这篇博客https://www.cnblogs.com/redirect/p/10066730.html
下面是实验楼前端代码的跟踪
用到了guacamole去实现
3、全屏
通过前端实现
4、共享屏幕
只需要分享vnc连接即可
总结:
后台创建虚拟机,我们直接使用的pve。从git上直接下载pve的项目然后集成到自己的项目里即可。创建直接调用clone方法,进行克隆,然后还有相应的开机、关机、删除等操作。
至于前端显示,pve也有现成的vncshell api但是我们并没有采用。我们想直接得到vnc的界面然后再做操作。所以,我们在每台虚拟机上搭建了vncserver,然后暴露出该机器的vnc地址即可。前端调用的话,需要搭建一个代理服务器,用websocketfy进行转化连接。只需要将vncserver的ip、端口转化为token。生成一个新的地址,就能直接打开vnc的界面。然后直接调用vnc的共享屏幕、全屏、粘贴即可。(上传、下载还是需要自己写。通过后端代码实现)
其实除了上传下载,其他的几个功能都是前端来实现的。也可以直接调用pve生成的连接,显示出vnc页面,但是需要提前验证一下。获得cookie才行。接口参见pve api。
5、怎么将pve的界面投到自己项目的web界面上呢?
实现办法如下:我们是用ifream实现的,直接把pve的novnc界面嵌套到ifream中,然后放到自己的项目中打开。利用ifream嵌套,巧妙的避开了pve的登录权限认证。
具体实现我这里有样例包,请自行下载。https://download.csdn.net/download/qq_29281307/12707372