如何解决使用JSzip
我正在创建一个程序,该程序通过电子邮件接收发票,将其另存为bson在数据库中,然后使用节点zip进行读取和压缩,使用JSzip发送以进行反应和解压缩,然后从流转换为要映射到的blob数组反应组件。我设法使用jszip将api调用中的res.data转换为3个blob,并尝试在iframe上使用几种不同的格式化方法来显示pdf,但iframe不会在blob数组中加载任何pdf。如果有人可以提供帮助,我将非常感谢。
从node和Mongo Grid-FS获取PDF
router.get("/invoices/new",auth,async (req,res) => {
const conn = mongoose.connection;
const gfs = Grid(conn.db,mongoose.mongo);
const period = JSON.parse(req.query.q);
const { periodStart,periodEnd } = period;
gfs.files
.find({
date: { $gte: periodStart,$lte: periodEnd },})
.toArray(function (err,files) {
if (err) {
res.json(err);
}
console.log(files[0].file_data.buffer);
const bufs = [];
files.map((f,i) => {
bufs[i]
? (bufs[i].path = f.file_data.buffer)((bufs[i].filename = f.filename))
: (bufs[i] = {
filename: f.filename,path: f.file_data.buffer,});
});
console.log(bufs);
var zip = new require("node-zip")();
let data;
bufs.forEach((buf) => {
zip.file(`${buf.filename}.file`,buf.path);
data = zip.generate({ base64: false,compression: "DEFLATE" });
});
console.log(data.length);
res.type("zip");
res.send(new Buffer(data,"binary"));
});
});
将承诺转化为处于反应状态的blob数组
const getInvoiceList = async (ranges) => {
const config = {
responseType: "arraybuffer",};
const qstring = JSON.stringify(ranges[0]);
const res = await axios.get(`/api/mail/invoices/new?q=${qstring}`,config);
let invoices = [];
JSZip.loadAsync(res.data).then(function (zip) {
Object.keys(zip.files).forEach(function (filename) {
zip.files[filename].async("blob").then(async function (fileData) {
invoices.push(fileData.slice(0,fileData.size,"application/pdf"));
});
});
});
dispatch({
type: LIST_INVOICES,payload: invoices,});
};
console.log(发票)
[]
0: Blob {size: 167263,type: "application/pdf"}
1: Blob {size: 236542,type: "application/pdf"}
2: Blob {size: 617702,type: "application/pdf"}
length: 3
__proto__: Array(0)
显示iframe的组件
return (
<div>
{invoices
? invoices.map((invoice) => (
<iframe
style={{ width: "563px",height: "666px" }}
src={URL.createObjectURL(
new Blob([invoice],{ type: "application/pdf" })
)}
type='application/pdf'
title='title'
/>
))
: ""}
</div>
);
};
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。