Nodejs express 4.9.8 express.bodyParser上传图片指定目录咋写

Nodejs express 4.9.8 express.bodyParser上传图片指定目录咋写

以前的写法是 app.use(express.bodyParser({uploadDir:’./uploads’})); 现在的写法是什么? express版本 4.9.8

== 已解决

Express 3 里的express.bodyParser 相当于 Express 4的body-parser + multer 所以需要multer模块 使用方法是 var multer = require(‘multer’); app.use(multer({dest: “./public/images”})) 就可以了

参考: http://expressjs.com/guide/migrating-4.html https://github.com/expressjs/multer?_ga=1.196729060.97302304.1413945723 感谢下面二位


7 回复

Nodejs express 4.9.8 express.bodyParser上传图片指定目录咋写

以前的写法是 app.use(express.bodyParser({uploadDir:’./uploads’}));。但是从 Express 4 开始,express.bodyParser 已经被移除,取而代之的是需要使用 body-parsermulter 模块来处理文件上传。

解决方案

为了在 Express 4 中实现文件上传到指定目录的功能,你需要使用 multer 模块。以下是具体的步骤和代码示例:

  1. 安装依赖

    首先,确保你已经安装了 multer 模块。如果没有安装,可以使用 npm 进行安装:

    npm install multer --save
    
  2. 配置 Multer

    接下来,在你的 Express 应用中配置 multer。以下是一个简单的示例:

    const express = require('express');
    const multer = require('multer');
    
    // 创建一个 Express 应用实例
    const app = express();
    
    // 配置 multer 存储选项
    const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, './public/images'); // 指定保存图片的目录
      },
      filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now()); // 自定义文件名
      }
    });
    
    // 创建 multer 实例
    const upload = multer({ storage: storage });
    
    // 设置路由处理文件上传
    app.post('/upload', upload.single('image'), (req, res) => {
      res.send('Image uploaded successfully!');
    });
    
    // 启动服务器
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

代码解释

  • Multer 配置

    • destination 函数指定了文件保存的目录。
    • filename 函数定义了文件的命名规则,这里使用时间戳来避免文件名冲突。
  • 路由处理

    • app.post('/upload', upload.single('image'), ...) 表示处理 POST 请求到 /upload 路径,并且只处理单个文件,字段名为 image
  • 启动服务器

    • app.listen(3000, ...) 启动服务器并监听 3000 端口。

通过以上步骤,你可以成功地将图片上传到指定目录。更多关于 multer 的详细信息可以参考其官方文档:Multer GitHub


用第三方库吧,推荐formidable

form = new formidable.IncomingForm()
  form.encoding = 'utf-8'
  form.uploadDir = path.join settings.root, 'upload_tmp'
  form.keepExtensions = true
  form.maxFieldsSize = 2 * 1024 * 1024
  form.keepAlive = true
  postFrom = ""

connect-multiparty 这个也可以

cnode 用的是 busboy,别人挑的…

别折腾了,express 4 官方推荐用https://github.com/expressjs/multer

它的底层也是busboy

非常简单

赞 , 帮到忙了

对于 Express 4.9.8 版本,express.bodyParser 已不再使用。取而代之的是使用 multer 来处理文件上传。

以下是具体的实现步骤:

  1. 首先安装 multer 模块:

    npm install multer --save
    
  2. 然后,在你的应用中设置 multer 中间件来指定上传图片的目标目录:

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

const app = express();

// 设置 Multer 存储配置
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './uploads'); // 指定保存上传文件的目录
    },
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now()); // 为上传文件生成一个唯一的文件名
    }
});

const upload = multer({ storage: storage });

// 使用 Multer 中间件处理文件上传
app.post('/upload', upload.single('image'), (req, res) => {
    // req.file 是单个文件的信息
    // req.body 将包含文本字段
    res.send('File uploaded successfully.');
});

app.listen(3000, () => console.log('Server started on port 3000'));

以上代码展示了如何设置 multer 来处理文件上传,并将文件保存到 ./uploads 目录下。注意这里我们使用了 upload.single('image') 方法,它假设表单中的文件输入字段名为 image。如果你需要处理多个文件,则可以使用 upload.array('images', numberOfFiles) 或者根据具体需求选择其他方法。

通过这种方式,你可以轻松地处理文件上传并在指定目录中保存文件。

回到顶部