如何解决使用jszip压缩和解压缩pdf进行表达和反应
我正在编写一个程序,该程序接收来自客户的电子邮件,下载附件并在iframe中显示pdf。我已经尝试了很多方法,并且我知道我基本上是对的。但是我无法查看该文件。我已经设法使用JSzip发送我的zip对象并解压缩并将其转换为blob数组。但是,无论是我下载文件,保存文件还是解压缩文件的方法,都变得有些混乱。任何帮助,将不胜感激。这是我的代码:
messages.forEach(function (message) {
var parts = imaps.getParts(message.attributes.struct);
attachments = attachments.concat(
parts
.filter(function (part) {
return (
part.disposition &&
part.disposition.type.toupperCase() === "ATTACHMENT"
);
})
.map(function (part) {
// retrieve the attachments only of the messages with attachments
return connection
.getPartData(message,part)
.then(function (partData) {
return {
filename: part.disposition.params.filename,data: partData,};
});
})
);
});
return Promise.all(attachments);
})
.then(function (attachments) {
attachments.forEach((attachment) => {
const conn = mongoose.connection;
const gfs = Grid(conn.db,mongoose.mongo);
var insert_data = {};
insert_data.file_data = Binary(attachment.data);
insert_data.filename = attachment.filename;
insert_data.date = Intl.DateTimeFormat(
"fr-CA",{
timeZone: "America/Los_Angeles",},{
year: "numeric",month: "numeric",day: "numeric",}
).format(new Date(Date.Now()));
console.log(insert_data);
var collection = gfs.collection("fs");
collection.insertOne(insert_data);
});
});
});
});
用于压缩下载的代码
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);
const bufs = [];
files.forEach((file) => {
bufs.push({ filename: file.filename,path: BSON.serialize(file) });
});
var zip = new JSZip();
var invoices = zip.folder("invoices");
bufs.forEach((buf) => {
invoices.file(`${buf.filename}`,buf.path);
});
const zips = [];
zip.generateAsync({ type: "nodebuffer" }).then(function (data) {
res.type("zip");
res.send(new Buffer(data,"binary"));
});
});
});
解压缩代码
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);
console.log(res.data);
let invoices = [];
JSZip.loadAsync(res.data).then(function (zip) {
Object.keys(zip.files).forEach(function (filename) {
console.log(zip.files);
zip.files[filename].async("blob").then(async function (fileData) {
fileData = fileData.slice(0,fileData.size,"application/pdf");
invoices.push(fileData);
console.log(fileData);
});
});
});
dispatch({
type: LIST_INVOICES,payload: invoices,});
};
我想知道是否通过添加到bson对象来破坏我的数据,如果不是,那一定是jszip错误。如果有人看到他们认为可能有帮助的任何东西,则id非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。