这几天在搞在线文档预览,网上查了几种方案,php
第一种:使用google的在线预览 -> 国内被Q,pass前端
第二种:使用第三方的,好比:永中dcs -> 要钱,passlinux
第三种:先转换为pdf,在使用pdf在线预览插件预览 -> 对服务器负担比较大。git
第四种:本身写解析库 -> 我这实力,开玩笑呢?github
查了查,也就第三种可行。不过我以前都是作的简单的web开发,想到文档转换对于cpu的消耗比较大,应该没法适应大规模的并发情形。也在segmentfault上提了一个问题:php长时间的服务的设计与和前端的交互,不过并无获得很好的解决。 web
后来我问了一个同窗,他以前用的unoconv把office文件转为pdf,而后经过站内信的方式提醒用户文档转换完成。中间用了php-resque这个轻量级消息队列。 redis
和平时的php开发不一样,除了cgi服务器之外,还要有个Worker,专门用来处理文档转换。 segmentfault
大概流程就是:php处理前端上传来的文件后,把转化文件的任务添加到redis里,而后不断的判断转换是否完成,转换完成后把pdf的路径传给前端,前端跳转过去。windows
见:https://github.com/nladuo/online_office_viewerbash
sudo apt-get install unoconv redis-server php5-redis git clone https://github.com/nladuo/online_office_viewer.git cd online_office_viewer && composer install
redis-server
cd online_office_viewer/cli bash ./start_worker.sh
cd online_office_viewer php -S 0.0.0.0:8888
若是转换出现了乱码,是由于linux系统上没有windows的字体,须要把字体文件拷贝到服务器上。具体能够百度unoconv中文乱码
。