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 中完成。

🛡
隐私优先处理
您的文件始终不离开本机。FileReader API 在本地将文件读入内存,Base64 输出完全在浏览器中生成,不发送任何网络请求。
即时拖放
将任意文件拖到工具上,即可立即看到 Base64 输出。无需等待上传,无进度条,无服务器施加的文件大小限制。
📁
支持任意文件格式
可编码 PDF、ZIP、图片、字体、音频文件、WebAssembly 模块或任何其他二进制格式。编码器将所有文件视为原始字节流——格式无关紧要。
🔒
无需注册账户
无需注册、登录或接受 Cookie,立即使用工具。输出结果可一键复制或下载为 .b64.txt 文件。

Base64 文件编码使用场景

前端开发者
将小图标、字体或 SVG 作为数据 URI 直接嵌入 CSS 或 HTML,减少额外的 HTTP 请求。一个 2 KB 的图标内联为 Base64 可节省一次网络往返,避免 50–200 毫秒的延迟。
后端工程师
当传输协议不支持多部分上传时,将文件附件包含在 JSON API 载荷中。在通过 REST 或 GraphQL 响应发送 PDF、报告或签署文件之前,将其编码为字符串字段。
DevOps / 基础设施
将二进制配置文件(TLS 证书、SSH 密钥、授权文件)以 Base64 字符串形式存储在环境变量、Kubernetes Secrets 或 Terraform tfvars 中——这些场所不允许存储原始二进制值。
QA / 测试工程师
为自动化测试生成 Base64 文件测试夹具,用于验证上传端点、电子邮件附件处理或文档处理流水线,无需在版本控制中管理二进制测试文件。
数据工程师
将二进制数据块(Parquet 元数据、Protobuf 模式、小型二进制资产)序列化为 Base64,以便存储在基于 JSON 的数据目录、配置仓库或迁移脚本中。
学习者 / 学生
通过对小文件进行编码并检查输出,观察二进制文件如何转变为文本。将 Base64 输出长度与原始文件大小进行比较,验证 RFC 4648 中描述的 33% 开销。

Base64 文件大小开销

Base64 编码将数据大小精确增加三分之一。每 3 个输入字节产生 4 个输出字符(每个表示 6 位)。当输入长度不是 3 的倍数时,会追加填充字符(=)。下表展示了原始文件大小与编码输出大小之间的关系。

文件大小原始字节数Base64 字节数开销
1 KB1,024 B1,368 B+33.3%
10 KB10,240 B13,656 B+33.4%
100 KB102,400 B136,536 B+33.3%
1 MB1,048,576 B1,398,104 B+33.3%
5 MB5,242,880 B6,990,508 B+33.3%
10 MB10,485,760 B13,981,016 B+33.3%

数据 URI 与 MIME 类型参考

数据 URI 使用格式 data:[MIME 类型];base64,[编码数据] 将文件内容直接嵌入 HTML、CSS 或 JavaScript。MIME 类型告知浏览器如何解析解码后的字节。下表列出常见文件扩展名、对应的 MIME 类型及数据 URI 前缀。

扩展名MIME 类型数据 URI 前缀
.pdfapplication/pdfdata:application/pdf;base64,...
.zipapplication/zipdata:application/zip;base64,...
.pngimage/pngdata:image/png;base64,...
.jpgimage/jpegdata:image/jpeg;base64,...
.gifimage/gifdata:image/gif;base64,...
.svgimage/svg+xmldata:image/svg+xml;base64,...
.woff2font/woff2data:font/woff2;base64,...
.mp3audio/mpegdata:audio/mpeg;base64,...
.wasmapplication/wasmdata:application/wasm;base64,...
.binapplication/octet-streamdata:application/octet-stream;base64,...

代码示例

以下可运行示例展示了如何在 JavaScript、Python、Node.js、bash 和 Go 中读取二进制文件并将其编码为 Base64。每个代码片段均生成标准 Base64(RFC 4648 第 4 节),带有填充字符。

JavaScript (browser)
// 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
}
Python
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..."
Node.js
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}`
CLI (bash)
# 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
Go
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)
}

常见问题

可以编码的最大文件大小是多少?
本工具完全在浏览器中运行,因此限制取决于可用内存。现代浏览器可以无问题地处理最大 50–100 MB 的文件。对于更大的文件,请使用命令行工具,如 base64(macOS/Linux)或 Python 的 base64 模块——它们分块处理文件,不会将整个输出一次性载入内存。
Base64 输出比原始文件大多少?
Base64 输出始终约比输入大 33.3%。具体公式为 ceil(n / 3) * 4,其中 n 是输入字节数。1 MB 的文件将产生约 1.33 MB 的 Base64 文本。这种开销是编码的固有特性,无法减少。
可以将文件编码为 Base64 并用作数据 URI 吗?
可以。在 Base64 字符串前添加 MIME 类型前缀:data:application/pdf;base64,,后面跟编码内容。浏览器会像处理普通文件一样解码并渲染数据 URI。数据 URI 适用于 img src、link href、CSS url() 和 anchor download 属性。
Base64 文件编码等同于加密吗?
不是。Base64 是一种编码方式,而非加密。它将二进制数据转换为文本表示,这种转换是可逆的——任何拥有 Base64 解码器的人都可以还原原始文件。Base64 不提供保密性、完整性或身份验证。如需保护文件内容,请先加密文件(例如使用 AES-256-GCM),再将密文进行 Base64 编码以便传输。
为什么 Base64 字符串末尾有一个或两个 = 字符?
= 字符是填充符。Base64 以 3 字节为一组处理输入,每组产生 4 个输出字符。当文件大小不是 3 的倍数时,会追加一个或两个填充字符,使输出长度始终是 4 的倍数。一个 = 表示最后一组有 2 个字节;两个 == 表示最后一组只有 1 个字节。
如何从命令行将文件编码为 Base64?
在 macOS 和 Linux 上,使用 base64 命令:base64 < file.pdf > file.b64.txt。在 GNU/Linux 上,添加 -w 0 以禁止换行。也可以使用 OpenSSL:openssl base64 -in file.pdf -out file.b64.txt。在 Windows PowerShell 上:[Convert]::ToBase64String([IO.File]::ReadAllBytes('file.pdf'))。
何时应使用 Base64 文件编码而非 multipart/form-data?
当传输协议要求纯文本格式时使用 Base64——如 JSON API、XML-RPC、环境变量或 Kubernetes Secrets。当通过 HTML 表单或支持二进制流的 REST 端点上传文件时,使用 multipart/form-data。multipart 更高效,因为它避免了 33% 的大小开销,但需要服务器解析 multipart 边界。