使用方法
- 將檔案拖到上傳區域,或點選上傳區域從裝置中選擇檔案(最大 100 MB)。
- 選擇輸出格式:純 Base64 適合 API 和配置檔案,Data URI 適合直接用於 HTML 和 CSS。
- 只有在目標格式要求 MIME 風格分行時(例如郵件正文),才開啟 76 字元換行。
- 核對檔名、MIME 型別和大小,然後複製結果,或下載為 .txt 檔案。
為什麼要把檔案編碼為 Base64?
很多在系統之間傳遞資料的格式只能承載文字。JSON、XML、YAML、HTML 和郵件頭都無法直接存放任意位元組,因為檔案中可能有零位元組、無效的字元序列,或者會被文字解析器改寫的換行符。Base64 把檔案的每 3 個位元組對映為 4 個字元,這些字元來自由字母、數字、+ 和 / 組成的 64 字元集,因此任何檔案都能作為普通字串傳輸,解碼後得到完全相同的位元組。
代價是體積:編碼後的文字比原檔案大約多 33%,加上換行還會再多一點。一個 3 MB 的檔案編碼後大約是 4 MB。
常見用途
- JSON 和 XML 介面。不支援 multipart 表單上傳的介面,通常要求把檔案以 Base64 字串放在某個欄位裡,檔名和型別放在其他欄位中。
- 郵件附件。MIME 用 Base64 編碼附件,每行不超過 76 個字元(RFC 2045)。開啟換行即可得到相同的格式。
- 配置和金鑰。Kubernetes Secret 中
data欄位的值都是 Base64,所以 TLS 證書、金鑰庫或許可證檔案要先編碼才能寫入清單。CI 系統也常用同樣的方式把二進位金鑰存進環境變數。 - 資料庫和原始碼。字型、提示音、測試樣本等小型二進位檔案,可以存進文字欄位或字串常量,不必單獨儲存為檔案。
如果是圖片,圖片轉 Base64 還能調整尺寸,並直接生成 HTML 和 CSS 程式碼。需要把 Base64 還原為檔案時,請使用 Base64 轉檔案。
純 Base64 還是 Data URI?
純 Base64 只包含編碼後的位元組。API、Kubernetes、資料庫和大多數程式設計庫需要的都是這種格式,檔名或內容型別通常放在另一個欄位裡。
Data URI 會在前面加上帶 MIME 型別的字首,例如 data:application/pdf;base64,,瀏覽器可以把整個字串直接當作 URL,用在 src、href 或 CSS 的 url() 中。如果介面要求純 Base64,就不要帶上這個字首,很多解碼器會因此報錯。需要自己指定 MIME 型別或改用百分號編碼時,可以使用 Data URI 生成器。
用於 JSON、YAML 或原始碼時請關閉換行。JSON 字串中不能出現原始換行符,YAML 裡分行的值也很容易出錯。
在命令列中編碼檔案
# Linux(GNU coreutils):-w 0 關閉預設的 76 字元換行
base64 -w 0 report.docx > report.txt
# macOS
base64 -i report.docx -o report.txt
# Windows PowerShell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\files\report.docx"))
# Kubernetes 會自動完成編碼
kubectl create secret generic app-cert --from-file=tls.crt
常見問題
檔案大小有限制嗎?
最多可以編碼 100 MB 的檔案。編碼結果比原檔案大約多三分之一,100 MB 的檔案會生成約 133 MB 的文字。在頁面中顯示這麼多文字可能很慢,處理大檔案時建議直接點選「下載」,不要從輸出框複製。
我的檔案會被上傳到伺服器嗎?
不會。檔案由瀏覽器中的 JavaScript 讀取和編碼,不會通過網路傳送,證書、金鑰和私人文件都只留在你的裝置上。
Base64 會壓縮或加密檔案嗎?
都不會。Base64 會讓資料變大約 33%,而且任何人都能解碼。如果檔案需要保密,請先加密再編碼;如果在意體積,請先壓縮,例如打包為 ZIP 或 gzip。
為什麼輸出結果中有換行?
因為開啟了 76 字元換行。這種格式符合郵件使用的 MIME 標準,但大多數 API、JSON 文件和 Kubernetes 清單都需要不分行的單行字串,用於這些場景時請關閉換行。