Мультер рекв.файл не определен — использование с Node / Express для загрузки изображения на s3

#node.js #express #amazon-s3 #multer #multer-s3

#node.js #экспресс #amazon-s3 #множественный #множественный запрос-s3

Вопрос:

Я знаю, что этот вопрос задавали много раз, я перепробовал почти все ответы, чтобы попытаться запустить это, но я продолжаю получать неопределенный запрос.file.

Код ниже:

services.imageUpload.js

 const aws = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");

aws.config.update({
  secretAccessKey: "XXXXXXXXXXXXX",
  accessKeyId: "XXXXXXXXXXXX",
  region: "XXXXXXX",
});
const s3 = new aws.S3();

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: "XXXXXXXXX",
    metadata: function (req, file, cb) {
      cb(null, { fieldName: "TESTING_META_DATA" });
    },
    key: function (req, file, cb) {
      cb(null, req.s3key);
    },
  }),
});

module.exports = upload;
 

routes.imageUpload.js

 const express = require("express");
const router = express.Router();
const upload = require("../services/imageUpload");

const singleUpload = upload.single("image");

router.post("/", function (req, res) {
  singleUpload(req, res, function (err) {
    return res.json({ request: req.file.location });
  });
});

module.exports = router;
 

index.js

 const express = require("express");
const app = express();
const cors = require("cors");
const imageUpload = require("./routes/imageUpload");

//Middleware
app.use(cors());
app.use(express.json());

//Image upload
app.use("/upload-image", imageUpload);

app.listen(5000, () => {
    console.log("server is running on port 5000");
});
 

Помощь была бы очень признательна! Довольно неприятно. В настоящее время тестируется API с postman и отправляется POST-запрос в виде данных формы с ключом «image» и значением загруженного файла изображения.

Комментарии:

1. Можете ли вы добавить свой полный index.js в главном посту ?

2. Ваше промежуточное ПО multer должно быть инициализировано до того, как будет запущен маршрут API для загрузки изображений и будет выполнена загрузка изображений

3. Привет @Md.ReyadHossain, спасибо за ваш комментарий. Не могли бы вы показать пример фрагмента, пожалуйста?

4. Я поделился фрагментом в ответе

Ответ №1:

В вашем index.js вы можете принести

 const upload = require("../services/imageUpload");
 

вверху, а затем инициализируйте промежуточное ПО multer здесь

 //Middleware
app.use(cors());
app.use(express.json());
app.use(upload.single("image"))
 

затем routes.imageUpload.js вы можете прочитать загруженный файл следующим образом

 router.post("/", function (req, res) {
    let fileDetails = req.files
    console.log(fileDetails )
    .
    .
    .
});
 

Или, если вам нужен только загрузчик в вашем routes.imageUpload.js , вы можете просто использовать промежуточное программное обеспечение следующим образом ,

 const express = require("express");
const router = express.Router();
const upload = require("../services/imageUpload");

const singleUpload = upload.single("image");

router.post("/",[singleUpload],function (req, res) {
    let fileDetails = req.files
    console.log(fileDetails )
    .
    .
    .
});
 

Комментарии:

1. Добро пожаловать, брат