使用方法
- 将文件拖到上传区域,或点击上传区域从设备中选择文件(最大 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 清单都需要不分行的单行字符串,用于这些场景时请关闭换行。