【问题标题】:Multer req.file is undefined - using with Node/Express for image upload to s3Multer req.file 未定义 - 使用 Node/Express 将图像上传到 s3
【发布时间】:2021-04-16 00:55:59
【问题描述】:

我知道这个问题已经被问了很多,我已经尝试了几乎所有的答案来尝试让它运行,但我一直对 req.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");
});

我们将不胜感激!相当令人沮丧。目前正在使用 postman 测试 API,并将 POST 请求作为表单数据发送,键为“image”,值为上传的图像文件。

【问题讨论】:

  • 你能在主帖中添加完整的 index.js 吗?
  • 你的 multer 中间件需要在 image-upload API 路由被命中并执行 imageUpload 之前被初始化
  • 嗨@Md.ReyadHossain,感谢您的评论。您介意展示一个示例 sn-p 吗?
  • 我在答案中分享了一个 sn-p

标签: node.js express amazon-s3 multer multer-s3


【解决方案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 )
    .
    .
    .
});

【讨论】:

  • 欢迎兄弟
猜你喜欢
  • 2021-05-02
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多