首页 > 解决方案 > Multer没有在nodejs中获取文件

问题描述

我正在尝试上传图片,但我不知道为什么它不起作用。我尝试了很多次尝试搜索解决方案,但仍然找不到任何解决方案。请帮助这是我的代码

路线

const router = express.Router();
const validation = [
  body("title").trim().isLength({ min: 7 }),
  body("content").trim().isLength({ min: 5 }),
];

router.get("/", postController.getAllPost);

router.get("/:postId", postController.getPostDetail);
router.post("/", validation, postController.createNewPost);1

postController.js

exports.createNewPost = (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    const error = new Error("Validation failed, entered data is incorrect");
    error.statusCode = 422;
    throw error;
  }
  // if (!req.file) {
  //   const error = new Error("No Image provided");
  //   error.statusCode = 422;
  //   throw error;
  // }
  const { title, content } = req.body;
  
  console.log("reqfile", req.file);  <-- i am getting undefined here
  const imageUrl = req.file.path;
  const post = new Post({
    title,
    content,
    imageUrl,
    creator: {
      username: "Aditya",
    },
  });
  post
    .save()
    .then((result) => {
      res.status(201).json({
        message: "Post created successfully",
        post: result,
      });
    })
    .catch((err) => {
      if (!err.statusCode) {
        err.statusCode = 500;
      }
      next(err);
    });
};

应用程序.js

const fileStorage = multer.diskStorage({
  destination: function (req, file, cb) {
    console.log("destFile", file);  <-- nothing gets logged here
    cb(null, "images");
  },
  filename: function (req, file, cb) {
    console.log("file", file);  <-- nothing gets logges here
    cb(null, new Date().toISOString() + "-" + file.originalname);
  },
});

const fileFilter = (req, file, cb) => {
  if (
    file.mimeType === "image/png" ||
    file.mimeType === "image/jpg" ||
    file.mimeType === "image/jpeg"
  ) {
    cb(null, true);
  } else {
    cb(null, false);
  }
};

// To parse Incoming data
app.use(bodyParser.json());

app.use(
  multer({
    storage: fileStorage,
    fileFilter: fileFilter,
  }).single("image")
);

这是我提出请求的方式

请求图片

标签: node.jsmulter

解决方案


那么OKI。

-src/
--routes.js
--app.js
--controller.js

让我们想象一下我们的项目看起来像那个 oki。你routes.js会有一些喜欢的

import { Router } from "express";
import multer from "multer";
import {
    uploadInePics,
} from "./controller";
const ots = multer({});
const inMemory = multer.memoryStorage();
const uploadStrategy = multer({ storage: inMemory, limits: { files: 5 }, preservePath: true }).array("file", 5);

export function picsRoutes () {
    const api = Router();

    api.route("/api/yow-path").get(getMyPics).post(uploadStrategy,uploadMyPics);

    return api;
}

controller.js 你可以看到他们的照片req.files

export async function uploadMyPics (req: Request, res: Response) {
    try {
        const account = await getToken(req.headers);

        for (const file of req.files) {
         // do the magic <3
        }
        return res.sendStatus(201)
    } catch (error) {
        return res.sendStatus(503)
    }
}

推荐阅读