Не могу создать .docx из Blob javascript

155
14 августа 2019, 08:40

На клиенте заполняется форма и аяксом данные отправляются на сервер, где формируется документ и отправляется обратно клиенту.
Код сервера:

    // Валидация входящих данных
    $php_word = new \PhpOffice\PhpWord\PhpWord();
    $section = $php_word->addSection(array('orientation' => 'landscape'));
    // Формирование документа 
    header('HTTP/1.0 201 Created');
    header('Content-Disposition: attachment; filename=test.docx');
    header('Content-Transfer-Encoding: binary');
    $wr = \PhpOffice\PhpWord\IOFactory::createWriter($php_word, 'Word2007');
    $wr->save('php://output');

Код клиента:

    var xhr = new XMLHttpRequest()
    xhr.open('GET', base_url('myserv'))
    // xhr.responseType = 'blob'
    xhr.send()
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4) {
            if(xhr.status === 201) {
                var size = Number(xhr.getResponseHeader('Content-Length'))
                var blob = new Blob([xhr.response], {
                    type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // переделать на данные из Content-Disposition
                    size: size
                })
                var url = window.URL.createObjectURL(blob)
                createLinkAndClick(url)
            } else if(xhr.status === 400) {
                // novalid
            }
        }
    }

createLinkAndClick() просто создает ссылку, заполняет href и имитирует click() по которому происходит загрузка файла.
Дело в том, что если раскомментировать

xhr.responseType = 'blob'

и передать xhr.response аргументом в

window.URL.createObjectURL()

вместо blob, то скачанный файл корректно откроется, а если формировать ObjectURL из blob, который у меня в коде то файл открывается с ошибкой "Не удалось открыть файл из за ошибок его содержимого".
Как правильно сформировать Blob javascript-ом для передачи его в createObjectURL?

READ ALSO
Как сравнить текущее время и время создания файла в PHP?

Как сравнить текущее время и время создания файла в PHP?

Имеется следующий php-код для создания кэш-файла:

165
Как переделать if на switch при работе с vector в C++ [закрыт]

Как переделать if на switch при работе с vector в C++ [закрыт]

у меня есть вектор, я могу пробежаться по нему через for() и if()

177
Как узнать цвет пикселя в текстуре?

Как узнать цвет пикселя в текстуре?

Есть у меня текстура в формате TGAЗная Х и У как я могу получить цвет пикселя? Какие библиотеки для этого подключить или скачать?

179
Как в richedit отключить звук

Как в richedit отключить звук

Если, когда курсор находится в позиции 0,0 нажать влево или вверх (те

177