如何把 Word 文档转换为 Base64
- 把
.docx或.doc文件拖到框里,或者用文件选择器选择它。可以同时处理多个文件。 - 输出为 默认是 纯 Base64。JSON 会附带文件名、MIME 类型和大小;HTML
<a download>会生成一个下载链接。 - 只有在手工构造 MIME 邮件时才勾选 每 76 字符换行。
- 点击 复制输出。
编码前请先保存文档。工具读取的是磁盘上的文件,所以仍在 Word 中打开、尚未保存的修改不会包含在内。
DOCX 还是 DOC:看开头几个字符
| 文件 | 是什么 | Base64 开头 |
|---|---|---|
.docx | 包含 XML 部件的 ZIP 容器 | UEsDB |
.docm(含宏) | 同样的 ZIP 容器 | UEsDB |
.doc | 复合文件二进制格式(OLE2) | 0M8R4KGxGuE |
加密的 .docx | 复合文件中的加密包 | 0M8R4KGxGuE |
如果某个服务说你的“DOCX”无效,而 Base64 以 0M8R4KGxGuE 开头,那么你发送的要么是改名为 .docx 的旧 .doc,要么是有密码保护的文件。如果以 JVBERi0 开头,说明有人把 PDF 存成了 .docx 文件名。PCFET0NUWVBF 或 PGh0bWw 表示 HTML,通常是下载时返回了一个错误页面。
Base64 Word 文件用在哪里
- 电子签名和文档生成 API 在 JSON 正文中以 Base64 形式接收文档,同时附带文件名和 MIME 类型,并且常常以同样的方式返回填写好或签署好的文档。
- 事务邮件 API 接受 JSON 中以 Base64 字符串表示的附件。同样内容的原始 MIME 版本使用每行 76 字符的格式;见 邮件中的 Base64。
- 把 DOCX 转为 PDF 的转换服务,在文件较小时接受内联的源文件。
Base64 是一种传输格式,起不到任何保护作用:任何截获字符串的人都能用 Base64 转 Word 解码出文档。对于机密文件,请依靠 TLS 和访问控制,或者对文档加密。见 编码与加密。
用 PHP 编码 DOCX
<?php
$path = 'contract.docx';
$payload = json_encode([
'filename' => basename($path),
'contentType' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'content' => base64_encode(file_get_contents($path)),
], JSON_UNESCAPED_SLASHES);
如果没有 JSON_UNESCAPED_SLASHES,PHP 会把 Base64 中的每个 / 写成 \/。这仍是有效的 JSON,也能正确解码,但字符串会变长,简单的文本比较也会失败。键名只是占位符,请换成你的 API 所用的名称。更多内容见 PHP 中的 Base64。
Excel 文件同样适用这种方法,只是 MIME 类型不同;见 Excel 转 Base64。如果接收方可以接受 PDF,PDF 转 Base64 可以避免不同 Word 版本之间的排版差异。
常见问题
Base64 DOCX 应该配哪个 MIME 类型?
application/vnd.openxmlformats-officedocument.wordprocessingml.document。较旧的 .doc 格式是 application/msword。API 常常需要在单独的字段中填写类型,有些 API 会根据它选择转换器。
为什么我的 DOCX Base64 以 UEsDB 开头?
DOCX 是由 XML 文件组成的 ZIP 压缩包,而每个 ZIP 都以 PK\x03\x04 开头,它的 Base64 就是 UEsDB。旧的二进制 .doc 则以 0M8R4KGxGuE 开头。
我的加密 DOCX 以 0M8R4KGxGuE 开头,文件坏了吗?
没有。Word 加密 DOCX 时,会把加密后的包存放在较旧的复合文件容器中,所以它带有 .doc 风格的文件头。文件没问题;接收方需要密码才能打开。