Если предполагается, что приведенная ниже переменная представляет структуру responseText:
responseText = {
result: true,
value: <the pdf byte array>,
errorMessage: null
}
responseText.value
- это байтовый массив.Если байтовый массив уже напечатан как Uint8Array, тогда это будет работать.
( Примечание: существуют другие типизированные массивы , поэтому выберите, какой из них лучше всего подходит для вашего случая ):
var blob = new Blob([response.value], { type: 'application/pdf'});
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
var fileURL = URL.createObjectURL(blob);
a.href = fileURL;
a.download = 'test';//filename
a.click();
}
Однако, если естьявляется массивом строк или целочисленным массивом байтов, как показано ниже:
responseText.value = [145, 229, 216, 110, 3]
, и его необходимо преобразовать в типизированный байтовый массив, тогда будет работать нижеследующее:
var ba = new Uint8Array(responseText.value);
или
var ba = new Uint8Array([145, 229, 216, 110, 3]);
Следовательно,
var blob = new Blob([ba], { type: 'application/pdf'});
Таким образом, байтовый массив можно использовать для создания большого двоичного объекта, поэтому файлзагружается при возникновении события click
.