文件转 Base64

拖入任意文件,无论是文档、压缩包、字体、证书还是程序,都能得到它的 Base64 编码,可输出纯文本或 Data URI。所有处理都在浏览器本地完成。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 将文件拖到上传区域,或点击上传区域从设备中选择文件(最大 100 MB)。
  2. 选择输出格式:纯 Base64 适合 API 和配置文件,Data URI 适合直接用于 HTML 和 CSS。
  3. 只有在目标格式要求 MIME 风格分行时(例如邮件正文),才开启 76 字符换行。
  4. 核对文件名、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 清单都需要不分行的单行字符串,用于这些场景时请关闭换行。

这个工具和 Base64 编码器有什么区别?
Base64 编码器面向文本,提供字符编码和 Base64 变体等选项。本页面面向文件:直接读取任意文件的原始字节,显示 MIME 类型,并能直接输出 Data URI。