檔案打包壓縮
多檔案打包為 ZIP 壓縮檔,支援拖曳上傳,瀏覽器本地處理
拖曳檔案到此處,或點選選擇檔案
支援所有檔案類型,可上傳多個檔案
什麼是 ZIP 壓縮?
ZIP 打包會把選中的多個檔案合併成一個可下載的壓縮檔,通常能減小體積,並讓傳輸與歸檔更方便。它適合傳送零散檔案、準備交付包、整理截圖、在郵件中附加多份檔案,或做小型備份。ZIP 是無損歸檔格式,解壓後檔案應能完整還原;但 JPG、PNG、MP4、PDF 等本身已壓縮過的格式,體積未必會明顯變小。這個瀏覽器工具會在本機產生壓縮檔,選中的檔案不需要上傳到伺服器。它較適合中等規模的檔案集合,特別大的檔案可能占用較多記憶體。ZIP 打包不是加密,敏感檔案仍需要密碼保護或其他安全流程。
使用方式
使用方式
- 將檔案拖曳到上傳區域,或點選「Select Files」按鈕來加入檔案
- 檢視檔案清單,必要時移除不需要的檔案
- 輸入 ZIP 檔案名稱(選填)
- 點選「Create ZIP Archive」按鈕以下載壓縮檔
壓縮說明
- 建立壓縮檔前,請先檢視檔案名稱與資料夾結構;ZIP 會保留原始路徑,可能暴露非預期的名稱。
- 若需長期儲存或與其他系統共用,請避免在檔案名稱中使用不支援的字元。
使用場景
技術原理
ZIP 容器由 PKWARE 的 APPNOTE 規範定義(目前版本為 6.3.10)。一個 `.zip` 檔案由三種記錄類型組成:每個儲存的檔案前都有 Local File Header,帶有 4 位元組簽章 `0x04034b50`(PK\x03\x04),後面跟隨壓縮資料;在最後一個檔案之後是 Central Directory,這是一個 File Header 表(簽章 `0x02014b50`),列出每個項目的名稱、大小、CRC-32 以及指回本地標頭的偏移量;最後 End of Central Directory 記錄(簽章 `0x06054b50`)位於檔案最末端,指向中央目錄的起始位置。讀取器從後向前解析 `.zip`:從檔案尾端反向掃描尋找 EOCD 簽章,跳轉到中央目錄,然後尋找每個本地標頭——這就是為什麼 ZIP 支援串流附加和快速隨機存取單一項目,而無需讀取整個壓縮檔。 本工具使用 JSZip 程式庫(或 fflate 作為更快的替代方案)在瀏覽器中組裝壓縮檔。使用者選取的每個 `File` 物件都會以 `ArrayBuffer` 讀取,透過 `zip.file(name, buffer)` 加入,然後 `zip.generateAsync({ type: 'blob', compression: 'DEFLATE', compressionOptions: { level: 6 } })` 產生一個 `Blob`,透過 `URL.createObjectURL()` 提供使用者下載。DEFLATE 是 ZIP 的標準壓縮方法,定義於 RFC 1951;它結合了 LZ77 滑動視窗字典匹配與 Huffman 編碼。壓縮等級 6(預設值)是一個平衡點——等級 1 大約快 4 倍但大 5-15%,而等級 9 比等級 6 慢 2-3 倍,通常只能額外縮小 1-2%。 完整性由 CRC-32 確保,使用 IEEE 802.3 多項式 `0xEDB88320`(反轉)逐檔案計算,並儲存在本地檔頭和中央目錄項目中。當通用用途旗標位元 11 設定時,檔名以 UTF-8 寫入(自 APPNOTE 6.3.0,2006 年起為強制要求);若未設定此旗標,較舊的工具會假設本地 OEM 字碼頁(DOS 上為 CP437,中文 Windows 上為 CP936/GBK),非 ASCII 檔名會出現亂碼。傳統 ZIP 格式使用 32 位元欄位表示大小和偏移量,單一項目和整個壓縮檔的上限約為 4 GiB(2³² − 1 = 4,294,967,295 位元組);ZIP64 在 APPNOTE 4.5+ 中定義,透過額外欄位將這些擴展為 64 位元,但 JSZip 的記憶體建構方式限制了實際壓縮檔大小在數百 MB 左右,超過就會耗盡分頁記憶體。
- ZIP 檔案結構(PKWARE APPNOTE 6.3.10):Local File Headers(`0x04034b50`)+ 檔案資料,然後是 Central Directory(`0x02014b50`),以 EOCD(`0x06054b50`)結尾。
- 讀取器從尾端解析:反向掃描尋找 EOCD 簽章,然後跳轉到中央目錄——這使得無需串流整個壓縮檔即可快速提取單一檔案。
- DEFLATE 壓縮(RFC 1951)= LZ77 滑動視窗字典 + Huffman 編碼;等級 6 為預設平衡點,等級 9 約提升 1-2% 但慢 2-3 倍。
- 完整性:使用多項式 `0xEDB88320`(反轉的 IEEE 802.3)的 CRC-32,儲存在本地標頭和中央目錄中;提取時進行驗證。
- UTF-8 檔名需要通用用途旗標位元 11(APPNOTE 6.3.0,2006);若未設定,較舊工具會回退到 CP437 / 本機 OEM 字碼頁,非 ASCII 檔名會出現亂碼。
- 傳統 ZIP 的大小限制為 2³² − 1 = 4,294,967,295 位元組(每個檔案和整個壓縮檔);ZIP64 額外欄位(APPNOTE 4.5+)擴展至 64 位元以支援更大的資料。
- 瀏覽器實作:JSZip / fflate 透過 `arrayBuffer()` 讀取每個 `File`,在記憶體中建構壓縮檔,並以 `Blob` 下載串流輸出——無需伺服器上傳。
範例
專案檔案打包
輸入: src/、package.json、README.md(數十個檔案)
輸出: project-2026-06-11.zip(單一壓縮檔,deflate 壓縮)
用途: 與隊友分享某個快照或附加到版本發佈多檔案傳輸(減少額外負擔)
輸入: 100 張小型圖片,每張 5-50 KB(合計約 3 MB)
輸出: photos.zip(單一檔案、單次 HTTP 請求,無逐檔負擔)
用途: 將大量小檔案上傳到按檔案計費的電子郵件或儲存服務時檔案整理
輸入: invoice.pdf、contract.docx、signed-acknowledgement.png
輸出: documents-2026Q2.zip
用途: 將稅務、法律或人事資料依日期整合為單一壓縮檔以利留存常見問題
打包成 ZIP 時我的資料會被上傳嗎?
不會。ZIP 檔是在你的瀏覽器中透過 JSZip 建立。原始檔案以 FileReader API 讀取後,在本機壓縮並提供下載,整個過程都不會經過網路。
預設使用哪一級壓縮?
預設為 DEFLATE 等級 6,在速度與壓縮率之間取得平衡,與多數 ZIP 工具一致。純文字內容(紀錄檔、JSON、原始碼)能壓得很好;已壓縮過的內容(JPEG、MP4、ZIP)幾乎沒有壓縮空間。
可以加密碼嗎?
JSZip 不支援加密的 ZIP 項目。即便有版本提供密碼保護,通常使用的也是 ZipCrypto,被公認不安全且早已被破解。若要真正的密碼保護,請改用桌面版的 7-Zip 並選擇 AES-256。
檔案數量與大小限制是多少?
實際限制取決於瀏覽器記憶體。桌機通常可處理數百 MB 總量,行動裝置瀏覽器則更為吃緊。若要打包極大量資料,請使用 7-Zip、WinRAR 或命令列 zip 等桌面工具,它們會從磁碟串流,不必把所有內容塞進記憶體。
資料夾結構會被保留嗎?
會。從檔案系統把資料夾拖進來時,相對路徑會原樣保留在 ZIP 內。本頁可能提供樹狀檢視,方便你在打包前確認結構。
Windows、macOS 與 Linux 都能正常開啟嗎?
可以。JSZip 產生的是標準 ZIP 檔。UTF-8 檔名在現代系統上通用;只有非常舊的 Windows 在被強制使用非 UTF-8 字碼頁時,才可能讓中文或日文檔名變成亂碼。新版 macOS 與 Linux 一律能正確處理 UTF-8。
ZIP 與 7Z 有什麼差別?
ZIP 採用 DEFLATE 壓縮,所有作業系統都能直接開啟。7Z 採用 LZMA/LZMA2,文字壓縮率明顯更高,但需要 7-Zip 或相容軟體才能解壓。本頁只輸出 ZIP。