Я хочу скачать pdf-файл, используя форму, затем извлечь первую страницу и преобразовать в jpeg (используя PDFImage), а затем загрузить как исходный pdf, так и jpeg в мою корзину s3. Код для отдельных шагов в порядке, но я не могу понять, как сделать преобразование JPEG, прежде чем использовать multers3 для загрузки. Код выглядит следующим образом:
Форма
<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>
Маршрут
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});
}
});
}
);
Загрузка файла
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);
}
})
});
Преобразование изображения 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")
});
Таким образом, проблема заключается в том, чтобы сначала использовать файл, который отправляется на маршрут, чтобы я мог реализовать преобразование PDFImage, а затем отправлять как исходный PDF, так и новый JPEG в multer (например, upload.array (). Я подумал, может быть, я мог бы использовать промежуточное программное обеспечение multer как у меня сейчас есть, сделайте преобразование, затем отправьте этот файл, но на самом деле не могу понять, как все это собрать. Любая помощь приветствуется!