Node.js 我想在本地上传一个文件,然后将该文件上传到S3。然而,Multer一次只允许一个或另一个

Node.js 我想在本地上传一个文件,然后将该文件上传到S3。然而,Multer一次只允许一个或另一个,node.js,amazon-s3,multer,pdf-extraction,Node.js,Amazon S3,Multer,Pdf Extraction,我的目标如下: 我想让用户上传PDF,从PDF中提取文本,将文本分配给数组对象。完成后,我想将该文件上载到S3存储桶。现在,我能够在没有太多问题的情况下完成第一部分。我之所以要做本地上传,首先是因为我可以从PDF中提取文本。这些方法本身是有效的。如果我想上传到S3,它会上传,数据库会被链接填充,以便我在前端显示它,但是BulletinMetaText字段不会被提取文本填充 我该怎么做呢 如果我不清楚,请让我知道我还能提供什么 多种方法: let uploadToS3 = multer({ s

我的目标如下: 我想让用户上传PDF,从PDF中提取文本,将文本分配给数组对象。完成后,我想将该文件上载到S3存储桶。现在,我能够在没有太多问题的情况下完成第一部分。我之所以要做本地上传,首先是因为我可以从PDF中提取文本。这些方法本身是有效的。如果我想上传到S3,它会上传,数据库会被链接填充,以便我在前端显示它,但是BulletinMetaText字段不会被提取文本填充

我该怎么做呢

如果我不清楚,请让我知道我还能提供什么

多种方法:

let uploadToS3 = multer({
  storage: multerS3({
    s3: s3,
    acl: "private",
    bucket: env == "production" ? "xxxx" : "xxxx",
    // metadata: function(req, file, cb) {
    //   console.log(file);
    //   console.log(req.body);
    //   cb(null, Object.assign({}, req.body));
    // },
    key: function(req, file, cb) {
      // console.log(file);
      cb(null, `${new Date().getFullYear()}/${file.originalname}`);
    }
  })
}).array("files");
// }).any();

var tempStorage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "client/v1.7/src/assets/pdf/");
  },

  // By default, multer removes file extensions so let's add them back
  filename: function(req, file, cb) {
    cb(null, `${file.originalname}`);
  }
});

var uploadToLocal = multer({ storage: tempStorage }).array("files");

let delay = time => {
  return new Promise((resolve, reject) => {
    setTimeout(function() {
      resolve("DONE");
    }, time);
  });
};
节点/快速后端

if (req.params.type === "files") {
    uploadToLocal(req, res, function(err) {
      if (err) {
        next({
          status: 500, //Server Error
          statusMessage: "Error: Failed to save file ",
          catchError: err //System error
        });
      } else {
        //TODO

        let {
          bulletinID,
          bulletinUUID,
          bulletinActive,
          bulletinType,
          bulletinCode,
          bulletinGroup,
          bulletinEn,
          bulletinFr,
          bulletinTitleEn,
          bulletinDescriptionEn,
          bulletinTitleFr,
          bulletinDescriptionFr,
          metaStringTags,
          bulletinPermission
        } = req.body.model;

        uploadToS3(req, res, function(err) {
          console.log("upload2Req");
          console.log(req.body);

          let bulletinFileEn,
            bulletinFileFr = "";

          // console.log("req.files");
          console.log(req.files);

          req.files.forEach(file => {
            if (file.originalname && file.originalname.includes("_en")) {
              console.log("file");
              console.log(file);
              console.log(file.key);

              bulletinFileEn = file.key;
            }
            if (file.originalname && file.originalname.includes("_fr")) {
              bulletinFileFr = file.key;
            }
          });
          console.log(bulletinFileEn);
          console.log(bulletinFileFr);

          extract(
            "client/v1.7/src/assets/pdf/test.pdf",
            // req.files.originalname,
            { splitPages: false },
            function(err, text) {
              if (err) {
                console.log(err);
                return;
              }
              console.log("text");
              // console.log(text);
              bulletinMetaText = text;

              if (err) {
                next({
                  status: 500, //Server Error
                  statusMessage: "Error: Failed to save file locally ",
                  catchError: err //System error
                });
              } else {
                // !~

                let newBulletin = {
                  bulletinID: bulletinID ? bulletinID : "NULL",
                  bulletinUUID: bulletinUUID ? bulletinUUID : uuid(),
                  bulletinActive: bulletinActive ? bulletinActive : true,
                  postedByUserID: req.user.id,
                  postedByUserUUID: req.user.userUUID,
                  bulletinType: bulletinType,
                  bulletinCode: bulletinCode,
                  bulletinGroup: bulletinGroup,
                  bulletinEn: bulletinEn ? true : false,
                  bulletinFr: bulletinFr ? true : false,
                  //English Bulletin - File/Link
                  bulletinTitleEn: bulletinTitleEn,
                  bulletinDescriptionEn: bulletinDescriptionEn,
                  bulletinLinkEn: null,
                  bulletinFileEn: bulletinFileEn,
                  //French Bulletin - File/Link
                  bulletinTitleFr: bulletinTitleFr,
                  bulletinDescriptionFr: bulletinDescriptionFr,
                  bulletinLinkFr: null,
                  bulletinFileFr: bulletinFileFr,
                  metaStringTags: metaStringTags,
                  bulletinPermission: bulletinPermission,
                  bulletinTextScrape: bulletinMetaText
                };

                console.log(newBulletin);
                InsertOrUpdateBulletin(newBulletin, req.user)
                  .then(result => {
                    res.status(200).json({
                      data: result,
                      status: 200, //Created
                      statusMessage: "Success: Bulletin Created"
                    });
                  })
                  .catch(error => {
                    next({
                      status: 500, //Server Error
                      statusMessage: "Error: Failed to save Bulletin ",
                      catchError: error //System error
                    });
                  });
              }
            }
          );
        });
      }
    });
  } 
这可能会有所帮助(关键字:may),但它使用的是express fileupload。仍然允许服务器端对数据进行操作