将同一文件的多个 blob 合并为一个以取回原始 pdf 文件



我正在检索存储在数据库中的pdf文件作为blob。但是一些 pdf 文件作为 blob 存储在多个列中。现在如何组合这些 blob 以取回原始文件

如果文件存储在单个列中,那么我的代码工作正常。但是对于存储在具有多个 blob 的多个列中的文件,它不起作用

let finalBinary = "";
for (let i = 0; i < data.data.length; i++) {
let binary = "";
// data.data[i].FILE_DATA.data is a buffer array
let bytes = new Uint8Array(data.data[i].FILE_DATA.data);
let len = bytes.byteLength;
for (let j = 0; j < len; j++) {
binary += String.fromCharCode(bytes[j]);
}
finalBinary = finalBinary + binary;
}
window.open(
"data:application/pdf;base64," + escape(window.btoa(finalBinary))
);

实际结果是无法为多列 pdf 加载 pdf。但是适用于单列pdf。

您似乎以多种方式破坏了二进制数据。let finalBinary = "";let binary = "";是字符串类型。

尝试以下方法来连接字节数组,例如:

var btoa = require('btoa'); // npm install btoa
function ConcatUint8Arrays(a, b) {
const result = new Uint8Array(a.length + b.length);
result.set(a, 0); //Copy a into result
result.set(b, a.length); //Copy b into result, after a
return result;
}
let a = new Uint8Array(5);
a.fill(47);
let b = new Uint8Array(5);
b.fill(74);
let c = ConcatUint8Arrays(a, b);
console.log(c);
console.log(btoa(c));

这给你的结果:

Uint8Array [
47, 47, 47, 47, 47,
74, 74, 74, 74, 74
]
NDcsNDcsNDcsNDcsNDcsNzQsNzQsNzQsNzQsNzQ=

将其探测到您的原始代码中,例如:

function ConcatArrays(a, b) {
const result = new (a.construtor)(a.length + b.length);
result.set(a, 0); //Copy a into result
result.set(b, a.length); //Copy b into result, after a
return result;
}
let finalBinary = [];
for (let i = 0; i < data.data.length; i++) {
// data.data[i].FILE_DATA.data is a buffer array
let bytes = new Uint8Array(data.data[i].FILE_DATA.data);
finalBinary = ConcatArrays(finalBinary, bytes);
}
window.open(
"data:application/pdf;base64," + escape(window.btoa(finalBinary))
);

希望这有帮助。

相关内容

最新更新