跳至主要內容
Skip to content

檔案上傳系統設計 (13) —— 文件預覽解決方案

恭喜你!我們已經走過了從底層 HTTP 協議到全球加速 CDN 的漫長旅程。現在,我們的系統已經具備了強大的上傳、整合、處理與保護能力。

但在實際應用中,使用者上傳檔案後,最常做的一件事就是「看一眼」。對於圖片,這很簡單;但如果上傳的是 PDF、Word 合約或是 Excel 報表呢?

這是本系列的完結篇,我們來聊聊如何優雅地解決 文件預覽 (File Preview)


一、 PDF 預覽:最親民的文件格式

PDF 是目前瀏覽器支持最完善的非圖片格式。

1. 原生方案:Embed & Iframe

最簡單的做法是利用瀏覽器內建的 PDF 閱讀器。

html
<iframe src="/path/to/my.pdf" width="100%" height="500px"></iframe>

2. 進階方案:PDF.js

如果你希望擁有完全掌控的 UI(例如禁止列印、浮水印或是分頁加載),Mozilla 開發的 PDF.js 是業界標準。它將 PDF 解析為 Canvas 繪製,不受瀏覽器外掛限制。


二、 Office 文件:複雜的挑戰

瀏覽器原生是看不懂 .docx.xlsx 的。你通常有三種選擇:

  1. 公用檢視器 (Public Viewers): 利用微軟或 Google 提供的線上預覽服務。你只需要提供一個公開的檔案連結。

    • https://view.officeapps.live.com/op/view.aspx?src=[YOUR_URL]
    • 缺點:檔案必須是公網可存取的,不適合私密文件。
  2. 後端轉 PDF: 在伺服器端利用 LibreOffice 或專門的轉檔服務(如 Go-Libreoffice),將 Office 文件先轉成 PDF,再套用 PDF 預覽邏輯。

  1. 前端渲染庫: 如 docx-previewexceljs,直接在前端解析並渲染。性能視檔案複雜度而定。

三、 預覽時的安全守則

預覽檔案時,最怕檔案中夾帶惡意腳本(XSS 攻擊)。

  • Sandbox 屬性:在使用 iframe 預覽時,務必加上 sandbox
    html
    <iframe src="..." sandbox="allow-forms allow-scripts"></iframe>
  • Content-Type:確保後端回傳正確的 MIME 標籤,防止瀏覽器誤將內容當成 HTML 執行。

全系列完結:系統化學習的回顧

在這 13 篇文章中,我們建立了一個完整的森林,而不僅僅是看到幾棵樹:

  1. 核心與儲存 (1-5):穩固的後端與資料庫設計。
  2. 整合與體驗 (6-10):順滑的前端交互與私有安全保護。
  3. 擴展與運維 (11-13):讓系統在大規模、高流量環境下生存。

後端工程師的價值,不在於你會寫多少個 POST 介面,而在於你對於數據傳輸細節的掌控、對安全邊界的守護,以及對系統可擴展性的前瞻性思考。


️ 進階挑戰

嘗試實作一個通用的檔案預覽組件,它可以根據檔案的 mime_type 自動切換圖片、PDF 或音影音播放器。


延伸閱讀與資源

← 上一章:檔案防盜鏈與全球加速 | 返回專案首頁