node.js - 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")
);
这是我提出请求的方式
解决方案
那么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)
}
}
推荐阅读
- datetime - 使用shopify液体模板的时区转换问题
- typescript - 打字稿枚举值作为数组
- java - 使用 Bouncy Castle 库 c# 解密 pdf.p7m 文件的问题
- html - CSS Hover 只影响孩子而不影响父母
- python - 在 pandas 数据框中为每个组获取第一条记录,并将 0 放入其他记录中
- android - onActivityResult 中的多个图像/图片
- angular - 使用多种颜色的 Angular Material 多进度条
- vlc - 如何在 zk 的 zul 中嵌入 VLC?
- python - 在对第一个 pandas python 进行排序时保持第二级多索引完整
- regex - 检查提供的字符串是否是有效的项目列表