Я пытаюсь загрузить (используя FileSaver.saveAs) массив байтов, получаемый с сервера (nodejs \ express) в виде почтового индекса.Мне удается загрузить его в формате zip, но он не открывается (это неверно).У меня было мало недоразумений относительно того, как должны быть определены данные - тип контента, responseType как на сервере, так и на клиенте, должен ли я преобразовать его в большой двоичный объект и т. Д.), Но я думаю, что я перебил их подробнымкод ниже.Проблема заключается в последней функции, в функции exportAsZip - данные достигают нужного размера, но , преобразовывая их в BLOB-объекты, раздувает их и, возможно, повреждает.Вот мой код (на стороне сервера - node.js-express с использованием функции промежуточного программного обеспечения): ЭТО УЖЕ ОБНОВЛЕНО КАК ФИКСИРОВАННЫЙ КОД: Маршрутизатор Express-router:
router.use(<some route>,(req, res, next) => {
return getData(req.query).then((dataResult) =>
{
{
res.contentType('application/zip');
return res.send([dataResult]); //Data result is byte array
}).catch((err) => {
console.error(err);
});
});
Всторона клиента (угловая): это функция компонента:
downloadAsZip()
{
let fileName : string = <fileName>;
this.srv.getData().subscribe(result =>
{
// const blob = new Blob([result], { type: 'application/octet-stream' })
/*This is the needed fix:*/
const byteArray = new Uint8Array(result);
const blob = new Blob([byteArray]);
this.fileService.exportAsZip(blob, fileName);
},
error => console.log(error)
);
}
Это код srv.getData:
getData() : Observable<any>
{
return this.http.get(<path>, /*{ responseType: 'blob' } - not needed*/)
}
Это функция fileService(exportAsZip):
exportAsZip(data, fileName)
{
/*The data is with a correct size, but converting it to a blob object inflate its size*/
/*this should be removed also*/
//const blobData: Blob = new Blob([data], {type: 'application/zip'});
FileSaver.saveAs(/*blobD*/data, fileName + '.zip');
}