1. 程式人生 > >基於unoconv的線上office預覽

基於unoconv的線上office預覽

 

 

 

 

這幾天在搞線上文件預覽,網上查了幾種方案,

  • 第一種:使用google的線上預覽 -> 國內被Q,pass

  • 第二種:使用第三方的,比如:永中dcs -> 要錢,pass

  • 第三種:先轉換為pdf,在使用pdf線上預覽外掛預覽 -> 對伺服器負擔比較大。

  • 第四種:自己寫解析庫 -> 我這實力,開玩笑呢?

查了查,也就第三種可行。不過我之前都是做的簡單的web開發,想到文件轉換對於cpu的消耗比較大,應該無法適應大規模的併發情形。也在segmentfault上提了一個問題:

php長時間的服務的設計與和前端的互動,不過並沒有得到很好的解決。

後來我問了一個同學,他之前用的unoconv把office檔案轉為pdf,然後通過站內信的方式提醒使用者文件轉換完成。中間用了php-resque這個輕量級訊息佇列。

和平時的php開發不同,除了cgi伺服器以外,還要有個Worker,專門用來處理文件轉換。

大概流程就是:php處理前端上傳來的檔案後,把轉化檔案的任務新增到redis裡,然後不斷的判斷轉換是否完成,轉換完成後把pdf的路徑傳給前端,前端跳轉過去。

實現

見:https://github.com/nladuo/online_office_viewer

效果

安裝

 
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

redis-server

啟動Worker

cd online_office_viewer/cli
bash ./start_worker.sh

啟動CGI伺服器

cd online_office_viewer
php -S 0.0.0.0:8888

測試轉換

選擇一個文件

 

等待上傳

檢視Worker的日誌

轉換成功後