【问题标题】:while uploading multiple files using multer in node js file is not created in destination directory在节点 js 文件中使用 multer 上传多个文件时未在目标目录中创建
【发布时间】:2023-01-20 01:02:37
【问题描述】:

我没有错误,我的控制台中有 req.files,但文件未在目标目录中创建

我试过通过multer上传图片 此代码是管理控制器 .js 文件

const storages = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "./public/product");
    console.log(file)
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + file.originalname);
    console.log("gettin the filename")
  },
});

const multipleUpload = multer({ storages });

 adminAddproduct_post: async (req, res) => {
    try {
      const product = new Products({
        product_id: randomId(len, pattern),
        productName: req.body.productName,
        productColor: req.body.productColor,
        productInStock: req.body.productInStock,
        productPrize: req.body.productPrice,
        productSize: req.body.productSize,
        productImage: req.files.map(file => Date.now() + file.originalname),
      });

    const result = await product.save((err) => {
      if (err) {
        console.log("this is the " + err);
      } else {
        console.log("product save successfully");
      }
    });
    } catch (e) {
      console.log(e);
    }
    res.redirect("/admin/add-product")

  },
 storages: multipleUpload,

我可以从 adminAddProduct 控制 req.files

admin.js 中的此代码我的路由文件

const {storages} = adminController
router.post("/add-product" , storages.array("uploads" , 4), adminController.adminAddproduct_post)

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    在您正在执行的代码中:- productImage: req.files.map(file => Date.now() + file.originalname), 而不是它,你可以这样做: -

    let filenames = req.files.map((file) => {
      return `${localhost:3000}/uploads/${file.filename}`;
    });
    

    下面const multipleUpload = multer({ storages }); 您可以输入productImage: filenames, 并保存产品。

    而且你还应该检查你的模型,你将productImage作为这样的数组productImage: [{ type: String, required: true }],

    希望这对你有帮助!

    这是我在项目中用来实现 multer 的代码:-

    import multer from "multer";
    import path from "path";
    import baseUrl from "../../helpers/baseUrl";
    
    const upload = multer({
      storage: multer.diskStorage({
        destination: "./public/uploads",
        filename: (req, file, cb) => {
          console.log(req.files);
          // console.log("files " + file);
          cb(
            null,
            req.files[0].fieldname + "_" + Date.now() + 
            path.extname(file.originalname)
          );
        },
      }),
    });
    
    // This is the middleware which I am using for my next js project.
    apiRoute.use(upload.array("img", 5));
    
    apiRoute.post(async (req, res) => {
      const products = await Product.find();
      console.log(req.files);
      let filenames = req.files.map((file) =>{
        return `${baseUrl}/uploads/${file.filename}`;
      })
      console.log("filenames: ", filenames);
      let p = new Product({
        title: req.body.title,
        slug: req.body.slug,
        desc: req.body.desc,
        img: filenames,
        category: req.body.category,
        size: req.body.size,
        color: req.body.color,
        price: req.body.price,
        availableQty: req.body.availableQty,
      });
      await p.save();
      res.status(200).json({ data: "success", products });
    });
    

    【讨论】:

    • 我的数据已成功保存在数据库中,但文件未在目标中创建,我的目标功能无法正常工作
    • 你应该尝试在字符串中给出你的目的地,比如目的地:“./public/uploads”。
    • 是的,我试过了,但没有进展
    • 尝试重新安装 multer 软件包可能会对您有所帮助
    • 我的 multer 对象是这样的:- const upload = multer({ storage: multer.diskStorage({ destination: "./public/uploads", filename: (req, file, cb) => { console.log(req.files ); // console.log("files " + file); cb( null, req.files[0].fieldname + "_" + Date.now() + path.extname(file.originalname) ); }, }), });
    猜你喜欢
    • 2016-06-25
    • 2017-08-30
    • 1970-01-01
    • 2019-12-06
    • 2020-05-21
    • 2020-12-25
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多