Как правильно скачивать бинарный docx на js?
Приветствую! Подскажите пожалуйста, сталкивался ли кто-то со скачиванием сгенерированного на сервере docx файла в бинарном виде (см. скрин). Вот способы которыми я пытался это провернуть. С библиотекой "file-saver" и без.
// Способ 1
const blob = new Blob([response.data], {
type: response.headers['content-type']
})
const a = document.createElement('a')
const url = window.URL.createObjectURL(blob)
a.href = url
a.download = `${type}_${new Date().toISOString()}.docx`
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
window.URL.revokeObjectURL(url)
// Способ 2
const blob = new Blob([response.data], {
type: response.headers['content-type']
})
const fileName = `${type}_${new Date().toISOString()}.docx`
saveAs(blob, fileName)
В обоих случаях файл скачивается, но в word он пустой, а через гугл документы не открывается. Если этот файл открыть блокнотом, там бинарное содержимое первого скрина.
Но, при прогоне этого запроса в talend появляется ссылка, по которой всё скачивается и открывается как надо.
Буде признателен за наводку.
Ответы (1 шт):
Вы почти делали все правильно.
async function getFile(url){
const request = new Request(url);
const response = await fetch(request);
const blob = await response.blob();
const objectURL = URL.createObjectURL(blob);
const a = document.createElement('a')
a.setAttribute('href', objectURL);
a.setAttribute('download',`${type}_${new Date().toISOString()}.docx`);
document.body.appendChild(a);
a.click()
document.body.removeChild(a)
URL.revokeObjectURL(objectURL);
}
А вообще, на будущее, docx - это-zip архив, в котором лежит document.xml и плюс в отдельных файлах все вложения.
