piapia123
zh

Base64 还原成文件

编码

所有处理都在浏览器本地完成,数据不上传服务器

Base64 文本
结果
识别出的类型
–
解码后大小
–
data: 前缀
–

全程在浏览器里解码,没有任何上传。换行、空格、URL-safe 的 - 与 _、以及缺掉的补齐符号都会自动处理。

把一段 Base64 文本还原成文件 —— 粘进来,点下载。带不带 `data:` 前缀都认,并且会从前缀里读出类型(`data:image/png;base64,…` 会得到 `file.png` 而不是 `file.bin`)。 粘贴这件事比看上去麻烦,所以这里容忍的都是粘贴带来的东西,而不是语法错误:换行与空格全部忽略(PEM 与 MIME 编码的 Base64 就是每 76 个字符折一行,那是规范写法)、认 URL-safe 的 `-` 与 `_`(JWT 里就是这种)、缺掉的补齐符号 `=` 自动补上。真正不合法的三种情况会分别说明:含字母表外的字符、长度是 4n+1(那种长度编码不出来)、补齐符号位置不对。 ⚠️ 一个限制:下载的文件名要靠你填。Base64 里不含文件名,`data:` 前缀里也只有类型 —— 工具能推断的只有扩展名。

功能

  • Base64 与 data URL 都能还原,自动取出前缀里声明的类型
  • 按 MIME 推断扩展名(png、pdf、woff2……),认不出的给 .bin 而不是瞎猜
  • 换行、空格、制表符一律忽略 —— PEM 那种折行写法可以直接粘
  • 认 URL-safe 的 `-` 与 `_`,以及缺少的 `=` 补齐
  • 三种非法情况分别给出原因,而不是一句「格式错误」
  • 显示解码后的大小、识别出的类型、有没有 data: 前缀
  • 全程在浏览器里解码,不上传

使用方法

  1. 把 Base64 文本(或整条 data URL)粘进输入框
  2. 类型与大小会立刻显示出来,可以下载时状态会变
  3. 按需要改一下文件名(自动填的是推断出来的扩展名)
  4. 点「下载文件」

常见问题

为什么还原出来的文件名是 file.bin?
因为你粘的 Base64 没有带 data: 前缀,里面没有任何类型信息 —— Base64 本身只编码字节,不编码「这是什么」。带上前缀(`data:image/png;base64,…`)工具就能推断出 `.png`。这也说明一件事:只给人一段裸 Base64,对方是没法知道该用什么程序打开它的,发文件时请连同类型一起说明。
为什么我粘进来的文本被说成非法?
三种原因,提示里会区分。含字母表外的字符:Base64 只用 `A–Z a–z 0–9 + / =`,出现别的字符通常是把别的文本混进来了(比如把 `<img src="data:…">` 整段标签连引号一起粘了进来 —— 那对引号就是非法字符)。长度是 4n+1:Base64 的字符数一定是 4 的倍数(去掉空白之后),余 1 说明少了一个字符或多了几个。补齐位置不对:`=` 只能出现在最后。
URL-safe 的 Base64 是什么?
标准 Base64 用 `+` 和 `/`,这两个字符在 URL 里有特殊含义(`+` 会被解析成空格),所以有一个变体把它们换成 `-` 和 `_`,并且通常省略补齐的 `=`。JWT、以及很多「把二进制塞进 URL」的场景用的是这一种。工具两种都认,粘进来不用手动替换。
粘一段很长的 Base64 会很慢吗?
粘贴与解码本身很快(几 MB 是毫秒级),慢的是输入框渲染这么长的文本 —— 这也是「文件转 Base64」那边把上限设在 4 MB 的原因。如果只是想解码一个很大的文件,用命令行的 `base64 -d 输入.txt > 输出` 会舒服得多。

相关工具