基於unoconv的線上office預覽
阿新 • • 發佈:2018-12-23
這幾天在搞線上文件預覽,網上查了幾種方案,
-
第一種:使用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的日誌
轉換成功後