Я создаю приложение реагирования, в котором я позволяю пользователю загружать файл PDF, а затем я преобразую файл PDF в файл JPG, сохраняю его локально, а затем загружаю в aws s3. Однако в настоящее время, когда я загружаю файл jpg в aws s3, файл не загружается как файл изображения. Я хочу загрузить локальный файл изображения в aws s3 без использования <input type="file" />
Я попытался это сделать, используя fs.readFile()
с s3.upload()
, но загруженный файл не является файлом изображения. Я также попытался использовать multer-s3
, но для этого пользователю необходимо вручную выбрать файл изображения с помощью <input type="file" />
, чего я хочу избежать.
Вот как я загружаю файл jpg:
const aws = require("aws-sdk");
const multer = require("multer");
const fs = require("fs");
const convertPdf = require("pdf-poppler");
const s3 = new aws.S3({
accessKeyId: "<key>",
secretAccessKey: "<secret>",
Bucket: "<bucketName>"
});
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, path.join(__dirname + "/uploads/"));
},
filename: function(req, file, cb) {
// let pdfName = "samplePDF";
// req.body.file = pdfName;
cb(null, file.originalname);
}
});
const upload = multer({
storage: storage
}); //SAVING PDF TO DISK STORAGE
router.post("/pdf", upload.single("pdf"),(req, res, next) => {
const uploadPath = req.file.path;
var imagePath = req.file.destination + req.file.originalname.slice(0, -4) + "-1.jpg";
let opts = {
format: "jpg",
out_dir: req.file.destination,
out_prefix: path.basename(req.file.path).slice(0, -4),
page: null
}
//CONVERTING PDF TO JPG
convertPdf.convert(uploadPath, opts).then(() =>
{
fs.readFile(imagePath, (err, data) => {
if (err) throw err;// UPLOADING FILE BUT NOT IN IMAGE FORMAT
const params = {
Bucket: "<bucketName>",
Key: path.basename(imagePath),
Body: data
};
s3.upload(params, (s3Error, data) => {
if (s3Error) throw s3Error;
console.log(`File uploaded successfully at ${data.Location}`);
res.json({
image: data.key,
location: data.Location
});
});
});
});
});
Я ожидал, что файл изображения будет загружен, но не загруженный файл - это не файл изображения, который является проблемой. Есть ли способ загрузить локальный файл изображения в aws s3, не требуя использования поля ввода?
РЕДАКТИРОВАТЬ: оказывается, что aws s3 делает загруженный файл закрытым по умолчанию, поэтому файл не может быть прочитан, проблема решается, когда я делаю файл общедоступным.