企评社

文件转 Base64

文件 → Base64 / data URI · Base64 → 文件还原 · 图片自动预览

全部在浏览器本地读取与编码,文件不上传、刷新即清空
把文件拖到这里,或点击选择(可多选)
任意类型;只读字节并在本机编码,不上传服务器;单文件 ≤ 20MB

Base64 是怎么膨胀三分之一的

Base64 把每 3 个字节(24 位)切成 4 个 6 位,每个 6 位查表落成一个可打印字符(A–Z、a–z、0–9、+、/),于是二进制变成能塞进 JSON、XML、邮件与 HTML 属性的纯文本。字节数不是 3 的倍数时用 = 补位:余 1 字节补 ==、余 2 字节补 =。所以编码后长度恒为 4 × ⌈字节数 ÷ 3⌉——本页显示的膨胀率是实测字符数 ÷ 原始字节数,并与这个理论值逐字节核对,对不上会明确标出来。

Base64 不是加密,也不是压缩。它只是换字母表:任何人拿到都能一步还原,体积还涨约 1/3。敏感内容请用真正的加密(AES 等),需要变小请用压缩——两件事都不是本页在做的。

data URI 是「前缀 + Base64」。形如 data:image/png;base64,iVBOR…data: 后面是 MIME 与可选参数(如 ;charset=utf-8),;base64 声明编码方式,逗号之后才是内容。把图片直接写进 HTML 的 src、把字体写进 CSS 用的就是它——代价是体积膨胀且无法被单独缓存。

大文件为什么分块读。编码按约 1MB 一块顺序读取,块长取 3 的整数倍(这样每块都能独立编码、直接拼接,不会在块边界多出补位符),每块编码完立即释放字节。结果是内存里只多出 Base64 文本本身;但文本仍要完整放进页面(约 1.33 倍),所以超过 20MB 请改用命令行工具。

常见问题

文件会被上传吗?Base64 能当加密用吗?

不会上传。读取、编码、解码全部在你的浏览器里完成,文件一个字节都不出本机,刷新页面即清空,也不写 localStorage。但要知道 Base64 只是编码、不是加密:它把二进制换成纯文本便于放进 JSON、邮件或 HTML,谁拿到都能一步还原;要保密请用 AES 之类的加密工具。另外它会带来约三分之一的体积膨胀,传大文件时不要拿它当压缩。

大文件能处理吗?为什么提示超限?

单文件上限 20MB。编码时按约 1MB 分块顺序读取,每块编码完立即释放,所以不会把文件在内存里复制成好几份;但 Base64 文本本身要完整放在页面里(约 1.33 倍体积),加上浏览器内存限制,更大的文件请用命令行:Linux 与 macOS 用 base64 文件 > 输出.txt,Windows PowerShell 用 [Convert]::ToBase64String([IO.File]::ReadAllBytes('文件'))。多选时会逐个处理,列表里逐行标注状态。

Base64 还原出来是什么文件?扩展名为什么是猜的?

按三条依据判断,优先级从高到低:一是 data URI 里的 MIME(data:image/png;base64,… 直接给出类型);二是内容开头的二进制签名(PNG 是 89 50 4E 47、JPEG 是 FF D8 FF、PDF 是 %PDF、ZIP 是 PK 开头等);三是正文看起来是文本就按 .txt 给出。三条都判不出来时一律用 .bin,并明确写着按内容猜不出类型——扩展名只是下载文件名的建议,不影响字节内容,改成正确扩展名即可正常打开。

和「编码转换」页的 Base64 有什么区别?该用哪个?

「编码转换」页面向文本小片段(粘贴文字转 Base64、URL-safe 变体、去掉补位)以及单个文件的快速复制;本页面向文件:多选批量、分块读取大文件、原始体积与膨胀率、纯 Base64 与 data URI 两种形态,以及把 Base64 反向还原成文件下载(带类型识别与图片预览)。要转一段文字用「编码转换」,要处理文件——尤其是几十 KB 以上的图片、PDF、压缩包——用本页。

相关工具