上传多张图片时 Multer 丢失文件
Multer missing files when uploading multiple images
我正在尝试使用 multer 上传多张图片,但它只上传了一些图片,而不是全部。例如,如果我尝试 10 张图片,只有 5-6 张图片没有错误地上传。 Alos 图像大小不是那么大,最大 200-300 kb 我也没有收到任何错误。所以不知道如何解决它。任何帮助将不胜感激。
const express = require("express");
const router = express.Router();
const multer = require("multer");
const { body } = require("express-validator");
const productController = require("../controller/productController");
const { protect, admin } = require("../middleware/authMiddleware");
const path = require("path");
// const upload = multer();
// const upload = require("../middleware/uploadMiddleware");
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, "uploads/");
},
filename: function (req, file, cb) {
cb(
null,
`${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`
);
},
});
function checkFileType(file, cb) {
const fileTypes = /jpg|jpeg|png|svg|webp/;
const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = fileTypes.test(file.mimetype);
if (extname && mimetype) return cb(null, true);
else cb("Images only!");
}
const upload = multer({
storage,
fileFilter: function (req, file, cb) {
checkFileType(file, cb);
},
});
/*
DETAILS - ADMIN CREATE PRODUCT ROUTE
METHOD - POST
*/
router.post(
"/",
upload.array("galleryImages"),
[
body("title", "Please enter product name").notEmpty().trim(),
body("color", "Please enter color").notEmpty().trim(),
body("weight", "Please enter product weight").notEmpty().trim().isNumeric(),
body("price", "Please enter product price").notEmpty().trim().isNumeric(),
body("manufacturer", "Please enter your city").notEmpty().trim(),
body("sizes", "Please enter your product size").isArray(),
body("details", "Please enter product details").notEmpty().trim(),
// body("galleryImages", "Please enter your "),
],
productController.addProduct
);
module.exports = router;
对于面临类似问题的任何人。您可以在您的控制器中控制台记录 console.log(req.files),然后点击 API。 Date.now() 不是那么快,并且为导致此问题的文件创建相同的名称。您可以使用 uniqid https://www.npmjs.com/package/uniqid 而不是 Date.now() function
我正在尝试使用 multer 上传多张图片,但它只上传了一些图片,而不是全部。例如,如果我尝试 10 张图片,只有 5-6 张图片没有错误地上传。 Alos 图像大小不是那么大,最大 200-300 kb 我也没有收到任何错误。所以不知道如何解决它。任何帮助将不胜感激。
const express = require("express");
const router = express.Router();
const multer = require("multer");
const { body } = require("express-validator");
const productController = require("../controller/productController");
const { protect, admin } = require("../middleware/authMiddleware");
const path = require("path");
// const upload = multer();
// const upload = require("../middleware/uploadMiddleware");
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, "uploads/");
},
filename: function (req, file, cb) {
cb(
null,
`${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`
);
},
});
function checkFileType(file, cb) {
const fileTypes = /jpg|jpeg|png|svg|webp/;
const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = fileTypes.test(file.mimetype);
if (extname && mimetype) return cb(null, true);
else cb("Images only!");
}
const upload = multer({
storage,
fileFilter: function (req, file, cb) {
checkFileType(file, cb);
},
});
/*
DETAILS - ADMIN CREATE PRODUCT ROUTE
METHOD - POST
*/
router.post(
"/",
upload.array("galleryImages"),
[
body("title", "Please enter product name").notEmpty().trim(),
body("color", "Please enter color").notEmpty().trim(),
body("weight", "Please enter product weight").notEmpty().trim().isNumeric(),
body("price", "Please enter product price").notEmpty().trim().isNumeric(),
body("manufacturer", "Please enter your city").notEmpty().trim(),
body("sizes", "Please enter your product size").isArray(),
body("details", "Please enter product details").notEmpty().trim(),
// body("galleryImages", "Please enter your "),
],
productController.addProduct
);
module.exports = router;
对于面临类似问题的任何人。您可以在您的控制器中控制台记录 console.log(req.files),然后点击 API。 Date.now() 不是那么快,并且为导致此问题的文件创建相同的名称。您可以使用 uniqid https://www.npmjs.com/package/uniqid 而不是 Date.now() function