繁体   English   中英

如何在 Node.js 中使用 multer 上传文件?

[英]How to upload files using multer in Node.js?

我想使用multer上传图像。 但它不起作用。 这里有什么问题?

这段代码在我的路由文件中。

var multer  = require('multer');
var upload = multer({ dest: 'public/uploads/' });

这是我的邮寄路线。

router.post('/addNewFood', upload.single('avatar'),function (req, res, next) {
console.log(req.files);
});

试试这个,它对我有用。 使用快递和节点。

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }); var upload = multer({ storage: storage }).single('avatar'); router.post('/addNewFood', //Your authentication check,// function (req, res, next) { upload(req, res, function(err) { if (err) { res.redirect(req.headers.referer + "/error.html"); return; } if (!req.files) { res.redirect(req.headers.referer + "/error.html"); return; } else { //Implement your own logic if needed. Like moving the file, renaming the file, etc. res.redirect(req.headers.referer); } }); } );

确保安装软件包

npm install --save multer

您可以尝试以下方式,在服务器端,在您的路由或控制器文件中配置 multer:

var multer = require('multer');
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'public/images/uploads')   
    },
    filename: function (req, file, cb) {
        cb(null, Date.now() + '-' + file.originalname)      
    }
})
var upload = multer({ storage: storage });

在存储对象中,destination 代表文件将上传到的位置。 因此,请确保在您的项目目录中创建了 /public/images/uploads 路径。 否则,您可能想要更改文件路径。

同样在存储对象文件名中代表上传的文件名是什么。 这里我将当前时间与原始文件名相加,使所有文件名唯一。

现在在您想要的路由中,假设

router.post('/', upload.single('image'), (req, res) => {
    //here your other task.
});

现在您的文件已上传。 确保客户端使用相同的名称,在本例中为“图像”。

<input type="file" name="image" id="image" class='form-control'>

这是一个单一的文件上传程序。 对于多个文件

router.post('/', upload.array(), function (req, res, next) {
  //your task goes here
});

有关更多信息,请查看此链接

 const multer = require("multer"); function fileFilter(req, file, cb) { if (file.mimetype === "image/jpeg" || file.mimetype === "image/jpg" || file.mimetype === "image/png") { cb(null, true) } else { cb(null, false) } cb(new Error('I don\\'t have a clue!')) } var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads') }, filename: function (req, file, cb) { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9) cb(null, file.fieldname + '-' + uniqueSuffix) } }) var upload = multer({ storage: storage, limits: { fieldSize: 1024 * 1024 * 5, fileFilter: fileFilter } }) router.post("/", upload.single("image_url"),(req, res) => { const new User=new User({ image_url: req.file.path })

试试这个代码

npm install express multer --save

在 Server.js 中导入依赖项

const express = require('express');
const multer = require('multer');
const path = require('path');

创建 Server.js

const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const port = 3000

const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, 'uploads/');
    },
   
    filename: function(req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
    }
});
   
var upload = multer({ storage: storage })
   
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});
   
app.post('/', upload.array('multi-files'), (req, res) => {
  res.redirect('/');
});
   
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

创建表格

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>How To Upload Multiple Image Using Multer In Node.js - phpcodingstuff.com</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
    <h1>Node js Express Multiple Image Upload using Multer Example - Tutsmake.com</h1>
    <form action="/" enctype="multipart/form-data" method="post">
      <input type="file" name="multi-files" accept='image/*' multiple>
      <input type="submit" value="Upload">
    </form>  
  </body>
</html>

有关更多信息,请查看此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM