文件在線預(yù)覽服務(wù),5 條路線選 1 條)
kkFileView 部署指南30 秒啟動(dòng)文件在線預(yù)覽服務(wù)5 條路線選 1 條【免費(fèi)下載鏈接】kkFileViewUniversal File Online Preview Project based on Spring-Boot項(xiàng)目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView附件里一份 50 頁(yè)的 PDF不下載就沒法看對(duì)方回一句文件在網(wǎng)盤里你自己下溝通鏈又?jǐn)嗔艘淮?。kkFileView 就是一個(gè)把這類麻煩接住的文件在線預(yù)覽服務(wù)基于 Spring Boot 的開源項(xiàng)目支持 50 多種格式本地化部署后一個(gè)文件 URL 就能在瀏覽器里直接看內(nèi)容。這篇 kkFileView 部署教程只講落地怎么起、怎么驗(yàn)、怎么調(diào)、怎么接進(jìn)你自己的系統(tǒng)。部署完成你擁有什么按任意一條路線把服務(wù)跑起來你手里就有下面這些可以立刻驗(yàn)證的東西格式覆蓋Officedoc/docx/xls/xlsx/ppt/pptx/csv、WPSwps/et/dps、OpenDocument、PDF/OFD/RTF、CADdwg/dxf/dwf、3D 模型stl/obj/glb 等、eml/msg 郵件、zip/rar/7z 壓縮包、圖片與音視頻全走瀏覽器渲染統(tǒng)一預(yù)覽入口http://服務(wù)器:8012/onlinePreview?url文件URL一個(gè)地址預(yù)覽任何格式集成接口REST API 現(xiàn)成的 iframe 頁(yè)面兩種接法后文都有示例預(yù)覽安全開關(guān)水印、trust.host域名白名單防 SSRF、Basic 認(rèn)證、AES 傳輸加密參數(shù)熱刷新改配置約 2 秒自動(dòng)生效多數(shù)場(chǎng)景不用重啟服務(wù)可觀測(cè)性/actuator/health和/actuator/metrics端點(diǎn)開箱可用全部參數(shù)支持KK_前綴環(huán)境變量覆蓋鏡像升級(jí)時(shí)不用改代碼30 秒跑起來Docker 一鍵啟動(dòng)命令這條命令是全文唯一需要背下來的部分# 拉取鏡像并啟動(dòng)映射宿主機(jī) 8012 端口 docker run -d --name kkfileview -p 8012:8012 keking/kkfileview:5.0.0然后打開http://服務(wù)器IP:8012/??吹绞醉?yè)輸入框部署就算成了。把任意外部 PDF 鏈接粘進(jìn)去走一遍轉(zhuǎn)換流程第一次較慢LibreOffice 在后臺(tái)干活同樣的 URL 第二次打開會(huì)直接命中緩存。鏡像里已經(jīng)裝好 JDK 21、LibreOffice 和中文字體這一步?jīng)]有任何環(huán)境前置。選一條適合你的部署路線三條路線的差異一張表說清楚先對(duì)號(hào)入座再動(dòng)手維度Docker 鏡像官方發(fā)布包源碼編譯適合人群有 Docker 環(huán)境的服務(wù)器生產(chǎn)與測(cè)試默認(rèn)選擇無 Docker 的內(nèi)網(wǎng) Windows 機(jī)器、只有一臺(tái) Windows 服務(wù)器的場(chǎng)景要改代碼、打包定制鏡像、跟進(jìn)源碼版本的人優(yōu)點(diǎn)依賴JDK 21 LibreOffice 字體全部?jī)?nèi)置一條命令啟動(dòng)Windows 版內(nèi)置便攜版 LibreOffice不裝辦公軟件完全可控改完直接出包缺點(diǎn)定制配置要改鏡像或走環(huán)境變量Linux 發(fā)布包需自備 LibreOffice依賴環(huán)境要手動(dòng)對(duì)齊編譯耗時(shí)最長(zhǎng)耗時(shí)約 5 分鐘含拉鏡像約 10~15 分鐘30 分鐘起推薦項(xiàng)有 Docker 就用 Docker 鏡像它是默認(rèn)答案只有沒有 Docker或必須改代碼兩個(gè)條件成立時(shí)再分別走發(fā)布包或源碼路線。部署操作詳解路線一Docker 鏡像準(zhǔn)備# 確認(rèn) Docker 可用、8012 端口未被占用 docker version curl -sv http://127.0.0.1:8012/ # 連接拒絕屬正常執(zhí)行# 后臺(tái)啟動(dòng)并映射 8012 docker run -d --name kkfileview -p 8012:8012 keking/kkfileview:5.0.0需要預(yù)覽服務(wù)器本地文件時(shí)掛載白名單目錄并指定存儲(chǔ)路徑# 白名單目錄 轉(zhuǎn)換產(chǎn)物目錄 8012 端口 docker run -d --name kkfileview -p 8012:8012 \ -e KK_LOCAL_PREVIEW_DIR/data/files -e KK_FILE_DIR/data/kkfileview/file \ -v /data/files:/data/files -v /data/kkfileview:/data/kkfileview \ keking/kkfileview:5.0.0驗(yàn)證# 容器存活檢查 首頁(yè)檢查 docker ps | grep kkfileview curl -I http://127.0.0.1:8012/ # 返回 200 即成功瀏覽器打開首頁(yè)粘貼一個(gè) URL 預(yù)覽確認(rèn)無亂碼即完成。日志有異常時(shí)docker logs -f kkfileview追一下。路線二官方發(fā)布包準(zhǔn)備JDK 21 已安裝java -version確認(rèn)Linux另裝 LibreOffice如apt-get install libreoffice-writer libreoffice-calc libreoffice-impressWindows 發(fā)布包內(nèi)置便攜版 LibreOffice跳過此項(xiàng)執(zhí)行發(fā)布包為kkFileView-版本號(hào).tar.gz解壓后包含 binjar 與啟動(dòng)腳本和 config 目錄。先設(shè)兩個(gè)環(huán)境變量再啟動(dòng)# 指向本機(jī) LibreOffice 安裝目錄Windows 寫實(shí)際安裝路徑 export KK_OFFICE_HOME/opt/libreoffice # 轉(zhuǎn)換產(chǎn)物存儲(chǔ)目錄確認(rèn)有寫權(quán)限 export KK_FILE_DIR/data/kkfileview/file cd kkFileView-5.0.0 bin/start.sh驗(yàn)證# 首頁(yè)狀態(tài)碼 健康檢查 curl -I http://127.0.0.1:8012/ curl http://127.0.0.1:8012/actuator/healthhealth 返回 UP、首頁(yè)可打開后用真實(shí)文件 URL 走一次完整預(yù)覽。路線三源碼編譯準(zhǔn)備JDK 21、MavenLibreOffice 按路線二補(bǔ)齊。執(zhí)行# 克隆倉(cāng)庫(kù)并進(jìn)入 server 模塊 git clone https://gitcode.com/GitHub_Trending/kk/kkFileView cd kkFileView/server mvn clean package # 運(yùn)行打包產(chǎn)物 java -jar target/kkFileView-*.jar驗(yàn)證啟動(dòng)日志出現(xiàn) Tomcat 監(jiān)聽 8012 后打開http://localhost:8012/粘貼一個(gè)文件 URL 確認(rèn)預(yù)覽正常。這條路線與 Docker 路線的差別只在鏡像幫你裝好的 JDK 和 LibreOffice現(xiàn)在要你自己對(duì)齊版本。部署完成后的驗(yàn)收清單跑通首頁(yè)只是起點(diǎn)逐項(xiàng)勾完這份清單再交接給團(tuán)隊(duì)首頁(yè)http://服務(wù)器:8012/打開無報(bào)錯(cuò)輸入框可用一份 docx、一份 xlsx、一份 pptx、一份 pdf 分別預(yù)覽Office 文檔默認(rèn)走 PDF 模式排版與源文件一致xlsx 走前端解析默認(rèn) web 模式大表格不拖垮服務(wù)器 CPU一個(gè) zip 能展開文件樹包內(nèi) txt 或圖片可點(diǎn)開一個(gè) mp4 能正常播放不用先下載20MB 以上文件首次響應(yīng)可接受同 URL 二次打開秒開緩存生效100 頁(yè)以上 PDF 翻頁(yè)流暢左側(cè)縮略圖側(cè)邊欄默認(rèn)可用/actuator/health返回 UP接進(jìn)監(jiān)控系統(tǒng)磁盤占用確認(rèn)自動(dòng)清理已啟用默認(rèn)開啟每天 3:00 執(zhí)行file.dir所在分區(qū)容量充足故意預(yù)覽一個(gè)壞文件頁(yè)面給出明確錯(cuò)誤日志里能定位到 預(yù)覽核心轉(zhuǎn)換邏輯 對(duì)應(yīng)記錄預(yù)覽變慢或格式異常時(shí)的調(diào)優(yōu)資源分配轉(zhuǎn)換吃內(nèi)存JVM 堆要給夠。Docker 路線在啟動(dòng)命令加-e JAVA_OPTS-Xms1g -Xmx2g裸機(jī)路線直接java -Xms1g -Xmx2g -jar ...。并發(fā)量上去時(shí)把office.plugin.server.ports從默認(rèn)的2001,2002擴(kuò)成更多端口等于多開幾個(gè) LibreOffice 轉(zhuǎn)換進(jìn)程分?jǐn)傌?fù)載。緩存策略單機(jī)保持默認(rèn)的cache.typejdk即可重復(fù) URL 不再二次轉(zhuǎn)換。多實(shí)例部署時(shí)切成cache.typeredis并配spring.redisson.address指到共享 Redis。注意緩存是URL 級(jí)的同一個(gè)文件換了 URL 參數(shù)就會(huì)重新轉(zhuǎn)換。大文件策略確認(rèn)異步任務(wù)權(quán)限已開啟kk.addTask默認(rèn) true大文件會(huì)轉(zhuǎn)成異步任務(wù)輪詢不會(huì)把請(qǐng)求線程卡死。PDF 按頁(yè)數(shù)自動(dòng)分檔 DPI50 頁(yè)以內(nèi) 150200 頁(yè)以上降到 72pdf.dpi.small到pdf.dpi.xxlarge想再快點(diǎn)可以繼續(xù)調(diào)低。Office 轉(zhuǎn)換默認(rèn)超時(shí) 5 分鐘office.plugin.task.timeout超過就拆文件或升內(nèi)存。媒體文件視頻轉(zhuǎn)換對(duì) CPU 和內(nèi)存消耗最大media.convert.max.size默認(rèn)限 300MB超出的直接拒絕不需要轉(zhuǎn)碼能力的業(yè)務(wù)環(huán)境建議直接media.convert.disabletrue關(guān)掉頭。把預(yù)覽接入你自己的系統(tǒng)三種接法按集成深度選直接跳轉(zhuǎn)給前端拼http://kkfileview:8012/onlinePreview?url...最簡(jiǎn)單iframe 嵌入在你的頁(yè)面里嵌一個(gè)預(yù)覽框用戶感知不到獨(dú)立服務(wù)反向代理Nginx 把/preview/**轉(zhuǎn)給 kkFileView業(yè)務(wù)側(cè)不暴露服務(wù)真實(shí)地址iframe 最小示例!-- 注意url 參數(shù)要先做 URLEncode -- iframe srchttp://kkfileview:8012/onlinePreview?urlhttps%3A%2F%2Fexample.com%2Fa.pdf width100% height720 frameborder0/iframe跨域拉取文件需要在 配置文件位置 里保持kk.Getcorsfiletrue。走 Nginx 反代時(shí)記得兩件事設(shè)base.url為對(duì)外域名把業(yè)務(wù)文件的域名加進(jìn)trust.host白名單。前端頁(yè)面模板在 templates 目錄要改預(yù)覽頁(yè)樣式從這里入手。高頻踩坑與解法現(xiàn)象轉(zhuǎn)換出的 PDF 里中文全是方塊或亂碼原因宿主機(jī)或容器缺中文字體Docker 官方鏡像已內(nèi)置自打鏡像或裸機(jī)部署最容易漏解法裝fonts-noto-cjk一類中文字體包后刷新字體緩存fc-cache -fv重啟服務(wù)再驗(yàn)現(xiàn)象預(yù)覽某個(gè)外部 URL 直接報(bào)未授權(quán)原因防 SSRF 默認(rèn)策略trust.host沒配該域名時(shí)拒絕所有外部文件請(qǐng)求解法把文件所在域名加進(jìn)trust.host逗號(hào)分隔5.0.0 起支持通配符和 CIDR生產(chǎn)環(huán)境不要用*現(xiàn)象大文件轉(zhuǎn)換到一半報(bào)超時(shí)原因默認(rèn) 5 分鐘任務(wù)超時(shí)且轉(zhuǎn)換是重計(jì)算解法調(diào)大office.plugin.task.timeout和office.plugin.task.taskexecutiontimeout同時(shí)確認(rèn)異步任務(wù)權(quán)限開著仍失敗就升內(nèi)存現(xiàn)象運(yùn)行幾天后磁盤被占滿原因轉(zhuǎn)換產(chǎn)物和緩存在file.dir下持續(xù)累積解法確認(rèn)cache.clean.enabledtrue、cache.clean.cron按預(yù)期執(zhí)行把file.dir指到容量充足的分區(qū)必要時(shí)把清理時(shí)間調(diào)頻現(xiàn)象8012 端口沖突服務(wù)起不來原因同機(jī)已有服務(wù)占用該端口解法KK_SERVER_PORT8080覆蓋端口同步改 Nginx 轉(zhuǎn)發(fā)規(guī)則反代場(chǎng)景別忘了把base.url一起改成對(duì)外域名否則生成的鏈接指向內(nèi)網(wǎng)地址結(jié)尾跑完部署、勾完驗(yàn)收清單你的團(tuán)隊(duì)看任何文件都不再需要先下載。下一步選一條路線把服務(wù)拉起來用真實(shí)業(yè)務(wù)文件過一遍驗(yàn)收清單?!久赓M(fèi)下載鏈接】kkFileViewUniversal File Online Preview Project based on Spring-Boot項(xiàng)目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考