Base64 File Encoder
将任意文件编码为 Base64:PDF、ZIP、图片等
将任意文件拖放到此处或点击上传
支持任何文件类型:PDF、ZIP、图片、二进制文件
什么是 Base64 文件编码?
Base64 文件编码将二进制文件——PDF、ZIP、图片、可执行文件、字体、音频——按照 RFC 4648 定义的字符集转换为纯 ASCII 文本。每三字节的二进制输入对应四个 Base64 字符,生成可在纯文本通道中传输的文本表示,适用于 JSON API 载荷、XML 文档、电子邮件正文、HTML 属性及环境变量。
与文本转 Base64 编码(操作字符串)不同,文件转 Base64 编码读取任意格式文件的原始字节流。PDF 的二进制头部、ZIP 的压缩块、PNG 的像素数据均被统一处理:作为一串八位字节进行重新编码。结果始终是有效 ASCII,可安全嵌入任何接受可打印字符的场景。
代价是体积:Base64 输出约比原始二进制大 33%。一个 1 MB 的 PDF 编码后约为 1.33 MB。这种开销源于用 6 位字符表示 8 位字节的固有特性,任何实现都无法消除。尽管如此,Base64 文件编码仍是在纯文本格式中嵌入二进制数据的标准方式,规范于 MIME(RFC 2045)、数据 URI(RFC 2397)及 JSON Web Tokens(RFC 7519)。
为什么使用这个 Base64 文件编码器?
本工具直接在浏览器中通过 FileReader API 将文件编码为 Base64。文件不会上传至服务器——整个转换过程在客户端 JavaScript 中完成。
Base64 文件编码使用场景
Base64 文件大小开销
Base64 编码将数据大小精确增加三分之一。每 3 个输入字节产生 4 个输出字符(每个表示 6 位)。当输入长度不是 3 的倍数时,会追加填充字符(=)。下表展示了原始文件大小与编码输出大小之间的关系。
| 文件大小 | 原始字节数 | Base64 字节数 | 开销 |
|---|---|---|---|
| 1 KB | 1,024 B | 1,368 B | +33.3% |
| 10 KB | 10,240 B | 13,656 B | +33.4% |
| 100 KB | 102,400 B | 136,536 B | +33.3% |
| 1 MB | 1,048,576 B | 1,398,104 B | +33.3% |
| 5 MB | 5,242,880 B | 6,990,508 B | +33.3% |
| 10 MB | 10,485,760 B | 13,981,016 B | +33.3% |
数据 URI 与 MIME 类型参考
数据 URI 使用格式 data:[MIME 类型];base64,[编码数据] 将文件内容直接嵌入 HTML、CSS 或 JavaScript。MIME 类型告知浏览器如何解析解码后的字节。下表列出常见文件扩展名、对应的 MIME 类型及数据 URI 前缀。
| 扩展名 | MIME 类型 | 数据 URI 前缀 |
|---|---|---|
| application/pdf | data:application/pdf;base64,... | |
| .zip | application/zip | data:application/zip;base64,... |
| .png | image/png | data:image/png;base64,... |
| .jpg | image/jpeg | data:image/jpeg;base64,... |
| .gif | image/gif | data:image/gif;base64,... |
| .svg | image/svg+xml | data:image/svg+xml;base64,... |
| .woff2 | font/woff2 | data:font/woff2;base64,... |
| .mp3 | audio/mpeg | data:audio/mpeg;base64,... |
| .wasm | application/wasm | data:application/wasm;base64,... |
| .bin | application/octet-stream | data:application/octet-stream;base64,... |
代码示例
以下可运行示例展示了如何在 JavaScript、Python、Node.js、bash 和 Go 中读取二进制文件并将其编码为 Base64。每个代码片段均生成标准 Base64(RFC 4648 第 4 节),带有填充字符。
// Read a file from an <input> element and encode to Base64
const input = document.querySelector('input[type="file"]')
input.addEventListener('change', (e) => {
const file = e.target.files[0]
const reader = new FileReader()
reader.onload = () => {
const base64 = reader.result.split(',')[1]
console.log(base64) // → "JVBERi0xLjQK..." (raw Base64, no data URI prefix)
}
reader.readAsDataURL(file)
})
// Convert a Blob to Base64 with async/await
async function blobToBase64(blob) {
const buffer = await blob.arrayBuffer()
const bytes = new Uint8Array(buffer)
let binary = ''
bytes.forEach(b => binary += String.fromCharCode(b))
return btoa(binary) // → standard Base64 string
}import base64
from pathlib import Path
# Encode a file to Base64
file_bytes = Path('document.pdf').read_bytes()
encoded = base64.b64encode(file_bytes).decode('ascii')
print(encoded[:40]) # → "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PA..."
# Write encoded output to a text file
Path('document.b64.txt').write_text(encoded)
# Build a data URI from a file
mime_type = 'application/pdf'
data_uri = f'data:{mime_type};base64,{encoded}'
print(data_uri[:60]) # → "data:application/pdf;base64,JVBERi0xLj..."import { readFileSync, writeFileSync } from 'fs'
// Encode a file to Base64
const buffer = readFileSync('archive.zip')
const base64 = buffer.toString('base64')
console.log(base64.length) // → 1398104 (for a ~1 MB file)
// Save Base64 output to a file
writeFileSync('archive.b64.txt', base64)
// Build a data URI
const mime = 'application/zip'
const dataUri = `data:${mime};base64,${base64}`# Encode a file to Base64 (macOS / Linux) base64 < document.pdf > document.b64.txt # Encode with no line wrapping (GNU coreutils) base64 -w 0 < document.pdf > document.b64.txt # Encode and copy to clipboard (macOS) base64 < image.png | pbcopy # Encode with OpenSSL (available everywhere) openssl base64 -in archive.zip -out archive.b64.txt # Pipe directly into curl for API upload base64 -w 0 < photo.jpg | curl -X POST -d @- https://api.example.com/upload
package main
import (
"encoding/base64"
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("document.pdf")
if err != nil {
panic(err)
}
encoded := base64.StdEncoding.EncodeToString(data)
fmt.Println(len(encoded)) // → 1398104 (for a ~1 MB file)
// Write to file
os.WriteFile("document.b64.txt", []byte(encoded), 0644)
}