Как конвертировать документ Word в Base64
- Перетащите файл
.docxили.docв поле или выберите его через диалог. Можно несколько файлов сразу. - По умолчанию в списке Формат вывода выбран Чистый Base64. JSON добавляет имя файла, MIME-тип и размер; HTML
<a download>делает ссылку для скачивания. - Галочку Перенос по 76 ставьте, только если собираете MIME-письмо вручную.
- Нажмите Скопировать результат.
Сохраните документ перед кодированием. Инструмент читает файл таким, какой он на диске, поэтому несохранённые правки, открытые в Word, в результат не попадут.
DOCX или DOC: смотрите на первые символы
| Файл | Что это | Base64 начинается с |
|---|---|---|
.docx | ZIP-контейнер с частями в XML | UEsDB |
.docm (с макросами) | тот же ZIP-контейнер | UEsDB |
.doc | Compound File Binary (OLE2) | 0M8R4KGxGuE |
зашифрованный .docx | зашифрованный пакет в составном файле | 0M8R4KGxGuE |
Если сервис отвергает ваш «DOCX» как некорректный, а Base64 начинается с 0M8R4KGxGuE, вы отправляете либо старый .doc, переименованный в .docx, либо файл с паролем. Начало JVBERi0 значит, что кто-то сохранил PDF под именем .docx. PCFET0NUWVBF или PGh0bWw означают HTML: скорее всего, скачивание вернуло страницу с ошибкой.
Куда отправляют файлы Word в Base64
- API электронной подписи и генерации документов принимают документ в Base64 в теле JSON вместе с именем файла и MIME-типом и часто так же возвращают заполненный или подписанный документ.
- API транзакционной почты принимают вложения строками Base64 в JSON. В сыром MIME то же вложение разбито на строки по 76 символов; см. Base64 в email.
- Сервисы конвертации DOCX в PDF принимают небольшой исходный файл прямо в запросе.
Base64 нужен для передачи и ничего не защищает. Любой, кто перехватит строку, декодирует документ через Base64 в Word. Для конфиденциальных файлов полагайтесь на TLS и контроль доступа или шифруйте документ. См. кодирование и шифрование.
Кодирование DOCX в PHP
<?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. Подробнее в статье Base64 в PHP.
Для файлов Excel подход тот же, только MIME-тип другой; см. Excel в Base64. Если получатель принимает PDF, PDF в Base64 избавит от расхождений вёрстки между версиями Word.
Вопросы и ответы
Какой MIME-тип указывать для DOCX в Base64?
application/vnd.openxmlformats-officedocument.wordprocessingml.document. Для старого формата .doc тип application/msword. API часто требуют тип в отдельном поле, а некоторые выбирают по нему конвертер.
Почему Base64 моего DOCX начинается с UEsDB?
DOCX устроен как ZIP-архив с XML-файлами, а любой ZIP начинается с PK\x03\x04, что в Base64 даёт UEsDB. Старый бинарный .doc начинается с 0M8R4KGxGuE.
Мой DOCX с паролем начинается с 0M8R4KGxGuE. Он повреждён?
Нет. Шифруя DOCX, Word кладёт зашифрованный пакет в старый контейнер составного файла, поэтому заголовок получается как у .doc. С файлом всё в порядке; чтобы открыть его, получателю нужен пароль.