微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用jszip压缩和解压缩pdf进行表达和反应

如何解决使用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 举报,一经查实,本站将立刻删除。