上传文件
  1. base64hub
  2. 文件工具
  3. 文件转 Base64

文件转 Base64

拖入一个或多个任意文件,即可复制纯字符串、data URI 或 JSON 对象形式的 Base64。大文件会在浏览器中分块读取,不上传任何内容。

免费 无需注册,不限次数 本地 不上传任何内容 批量 多个文件,一个 JSON 数组 更新于 2026年10月27日
将文件拖到这里、粘贴或选择文件
输入 –输出 –大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把文件转为 Base64

  1. 把一个或多个文件拖到框中,使用文件选择器,或用 Ctrl+V 粘贴已复制的文件。
  2. 选择 输出为:纯 Base64(此页默认)、Data URI、HTML <a download>、JSON,以及图片和字体相关的包装格式。
  3. 可选:URL 安全(- _) 会把 + 和 / 换成 - 和 _;每 76 字符换行 会为 MIME 电子邮件分行。
  4. 按 复制输出,或按 另存为 .txt 得到 filename.ext.b64.txt。

有多个文件时,列表会显示每个文件名及其原始大小和编码后的大小。显示 用于查看单个结果,全部复制为 JSON 会把所有文件复制为 {name, type, size, data} 对象组成的数组,可以直接粘贴到测试数据文件或种子脚本中。

输出选项对非图片文件的含义

输出为report.zip 的结果用途
纯 Base64UEsDBBQAAAAI...API 字段、环境变量、配置值
Data URIdata:application/zip;base64,UEsDBBQA...HTML 或 JavaScript 中的 URL
HTML <a download><a href="data:application/zip;base64,..." download="report.zip">report.zip</a>自包含的下载链接
JSON{"name": "report.zip", "type": "application/zip", "size": 323, "data": "UEsDBBQA..."}测试数据、你自己的上传接口

JSON 的键是固定的(name、type、size、data)。如果 API 要求其他名称,粘贴后再改名。size 是原始文件的字节数,接收方可以用它核对解码后的长度。

data URI 中的 MIME 类型和 JSON 中的 type 来自你的浏览器。浏览器不认识该文件时,工具会根据扩展名猜测;如果还是不行,就使用 application/octet-stream。受影响的只是标签,Base64 本身无论如何都一样。

CI 密钥和配置中的二进制文件

把整个文件编码的一个常见原因,是密钥存储只能保存文本:CI 变量、.env 文件、Kubernetes Secret。签名用的 keystore、证书和服务账号文件以一行 Base64 存入,再在流水线中还原:

echo "$KEYSTORE_B64" | base64 -d > release.keystore

这种场景请关闭 每 76 字符换行。带换行的值经常被密钥管理界面或 shell 弄乱。Kubernetes 在 data: 下就是这样存储每个值的,Kubernetes Secret 解码器 可以把它们读出来。

从开头几个字符判断编码的是什么

大多数文件格式的开头几个字节是固定的签名,所以不用解码,看 Base64 的开头就知道类型。几个常见的例子:

文件类型Base64 开头
PDFJVBERi0
ZIP、DOCX、XLSX、PPTX、JAR、APKUEsDB
gzip(.gz、.tgz)H4sI
7-ZipN3q8ryc
Windows EXE 或 DLLTVqQ(大多数文件),一定以 TV 开头
Linux ELF 二进制文件f0VMRg
SQLite 数据库U1FMaXRlIGZvcm1hdCAz
带 ID3 标签的 MP3SUQz
PNGiVBORw0KGgo
JSON 对象eyJ(对应 {")

更完整的列表见 常见的 Base64 前缀。用 Base64 转文件 解码时,也是用同样的方法识别类型。

大小、内存和大文件

Base64 输出是输入的 4/3,向上取整到 4 个字符的倍数。1 MB 的文件变成 1,398,104 个字符,开启 每 76 字符换行 还会再多 18,396 个换行字符。输出下方的计数器会显示两个大小以及额外开销的百分比。

一切都在浏览器标签页中运行,所以实际限制取决于设备的内存:

  • 文本框只显示输出的前 4 MB;复制输出 和 另存为 .txt 始终使用完整结果。
  • 输出超过约 48 MB 时,复制输出 不可用。
  • 大于约 48 MB 的文件会分块编码,结果只能通过 另存为 .txt 获取。

如果文件这么大,不妨想想 Base64 是否是合适的传输方式。multipart 上传或直接传输二进制数据可以避免 33% 的额外开销,也能避免两端的内存峰值。大小计算器 可以在开始之前算出编码后的大小。

在命令行或代码中编码文件

Linux,使用 GNU coreutils(-w 0 关闭默认的 76 字符换行):

base64 -w 0 report.zip > report.zip.b64

macOS(那里的 base64 默认不换行):

base64 -i report.zip -o report.zip.b64

Windows PowerShell:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\data\report.zip")) | Set-Content report.zip.b64

Python:

import base64
from pathlib import Path

encoded = base64.b64encode(Path("report.zip").read_bytes()).decode("ascii")

不把大文件整个载入内存的流式处理方法,见 Python 中的 Base64、Node.js、Java 和 PHP。

常见问题

  • 输出中有换行。 GNU base64 默认每 76 个字符换行,openssl base64 每 64 个字符换行,certutil -encode 还会加上头部行。很多 JSON API 和环境变量需要单行。请使用 -w 0、openssl base64 -A,或在本工具中关闭换行。
  • data URI 中是 application/octet-stream。 浏览器不知道文件类型,扩展名也不在工具的列表中。字节本身仍然正确;如果接收方在意,请替换前缀中的 MIME 类型。
  • 复制输出按钮是灰色的。 结果超过了约 48 MB 的复制上限。另存为 .txt 仍然可用,大多数需要该字符串的工具也能从文件中读取。
  • JSON 中某个文件是 "data": null。 批量处理时,超过约 48 MB 的文件会分块编码、只供下载,所以 全部复制为 JSON 不包含它们的数据。请单独编码该文件并保存为 .txt。
  • 解码出的文件比原文件小。 字符串被截断了。请把解码后的长度与 JSON 输出中的 size 值对比。
  • 输入是文本时输出出现乱码。 Base64 会原样保留字节,包括原来的字符编码。UTF-16 的文本文件解码出来还是 UTF-16,而不是 UTF-8。对于手动输入的文本,请使用 文本转 Base64,它可以选择字符集。

常见问题

哪些类型的文件可以转为 Base64?

任何文件都可以。Base64 编码的是字节,不关心字节的含义,所以可执行文件、压缩包、数据库和文档与文本的处理方式完全相同。PDF 转 Base64 等针对特定格式的页面只是额外提供了该格式的提示。

文件大小有限制吗?

没有固定限制,因为处理都在你的浏览器中完成。输出不超过约 48 MB 时可以复制,更大时请用 另存为 .txt。超过约 48 MB 的文件会分块编码,只提供下载。

在 Windows 上不装额外工具,怎样把文件编码为 Base64?

PowerShell 一行即可:[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\path\file.bin"))。certutil -encode 也可以,但它会加上 -----BEGIN CERTIFICATE----- 行并对输出换行,之后还得手动去掉。

data URI 使用哪种 MIME 类型?

使用浏览器为该文件报告的类型。如果浏览器没有报告,工具会根据扩展名猜测,猜不出来就用 application/octet-stream。接收方需要特定类型时,请手动修改前缀。

怎样把 Base64 解码还原成文件?

使用 Base64 转文件。它会根据解码后的字节识别文件类型,并建议合适的扩展名。