在 multer 上传到 S3 之前操作文件

dou*_*air 6 node.js express multer-s3

我想使用表单下载 pdf 文件,然后提取第一页并转换为 jpeg(使用 PDFImage),然后将原始 pdf 和 jpeg 上传到我的 s3 存储桶。各个步骤的代码很好,但在使用 multers3 上传之前我无法弄清楚如何进行 jpeg 转换。代码如下:

形式

<form action="/pdfCreate/<%= paper.id %>?_method=PUT" method="POST" enctype="multipart/form-data">
    <div class="uploadForm">
        <label for="pdfUpload">Select file to upload</label>
        <input type="file" id="pdfUpload" class="uploadfile" name="file" id="file-Upload" placeholder="Upload pdf file">
    </div>
    <div class="uploadForm">
        <button type="submit" value="Upload PDF">Upload Paper Info</button>
    </div>
</form>

Run Code Online (Sandbox Code Playgroud)

路线

router.put("/pdfCreate/:id", upload.single("file"), (req,res) => {
    const pdfFile = req.file;
    const pdfPath = req.file.location;
        PDFfile.updateOne ({_id:req.params.id}, {pdfPath:pdfPath}, function(err,file){
            if(err){
                console.log("Error");
            } else {
                // req.flash("success", "PDF successfully uploaded");
                res.render("displayPage", {path: pdfPath});
            }
        });
    }
);
Run Code Online (Sandbox Code Playgroud)

上传文件

aws.config.update({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region: 'us-east-2',
});

const s3 = new aws.S3();

const upload = multer({
  storage: multerS3({
    acl: 'public-read',
    s3:s3,
    bucket: process.env.S3_BUCKET,
    metadata: function (req, file, cb) {

      cb(null, {fieldName: file.fieldname});
    },
    key: function (req, file, cb) {
      const fileName = Date.now().toString() + "-" + file.originalname;
      cb(null, fileName);
    }
  })
});
Run Code Online (Sandbox Code Playgroud)

PDF 到 JPEG 图像转换的工作方式应类似于以下代码,采用文件名“file.pdf”。我想做的是获取提交到路由的文件(req.file?)并使用它,但我收到一条错误消息,说这是一个对象而不是字符串。

let pdfImage = new PDFImage("./public/file.pdf", {convertOptions: {"-resize" : "300%",}
    });
    pdfImage.convertPage(0).then(function (imagePath) {
    fs.existsSync("/tmp/slide-0.png") 
    });
Run Code Online (Sandbox Code Playgroud)

所以问题首先是使用发送到路由的文件,这样我就可以实现 PDFImage 转换,然后将原始 PDF 和新的 JPEG 发送到 multer(例如 upload.array())。我在想也许我可以使用 multer 中间件正如我目前所拥有的那样,进行转换然后发送该文件,但确实无法弄清楚如何将它们放在一起。任何帮助表示赞赏!