NodeJS使用formidable实现文件上传

下面是详细讲解“NodeJS使用formidable实现文件上传”的完整攻略:

什么是formidable?

formidable是NodeJS的一个表单数据处理库,包括以下功能:

  1. 把上传的文件保存到本地文件系统中
  2. 转换HTTP请求中的表单数据为可读取的对象
  3. 限制上传文件的大小

安装formidable

安装formidable非常简单,只要在项目目录执行以下命令即可:

npm install formidable --save

文件上传处理

  1. 首先,需要使用NodeJS的HTTP模块创建一个服务器,示例代码如下:

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
// 在此添加文件上传处理功能
});

server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
```

  1. 接下来,需要使用formidable来处理上传的文件数据,示例代码如下:

```javascript
const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

const server = http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
// 创建formidable实例
const form = new formidable.IncomingForm();

   // 解析上传的文件数据
   form.parse(req, (err, fields, files) => {
     if (err) throw err;

     // 在这里处理上传的文件
     const oldpath = files.file.path;
     const newpath = './uploads/' + files.file.name;

     fs.rename(oldpath, newpath, (err) => {
       if (err) throw err;

       res.write('File uploaded and moved!');
       res.end();
     });
   });
 } else {
   res.writeHead(200, {'Content-Type': 'text/html'});
   res.write('<form action="/upload" method="post" enctype="multipart/form-data">');
   res.write('<input type="file" name="file"><br>');
   res.write('<input type="submit">');
   res.write('</form>');
   return res.end();
 }

});

server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
```

在这个示例中,当用户访问根URL时会展示文件上传表单,用户选择文件并提交表单时,服务器将收到一个POST请求,formidable会解析上传的文件数据并保存到本地文件系统中。

示例说明

示例1:上传图片并显示

接下来介绍一个示例,该示例将上传的图片在页面上进行展示。代码如下:

const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

const server = http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    // 创建formidable实例
    const form = new formidable.IncomingForm();

    // 解析上传的文件数据
    form.parse(req, (err, fields, files) => {
      if (err) throw err;

      // 在这里处理上传的文件
      const oldpath = files.file.path;
      const newpath = './uploads/' + files.file.name;

      fs.rename(oldpath, newpath, (err) => {
        if (err) throw err;

        res.write('File uploaded and moved!<br><br>');
        res.write(`<img src="${newpath}" width="500px">`);
        res.end();
      });
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="/upload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="file"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

在这个示例中,服务器将上传的图片保存到本地文件系统中,并将图片路径传递给前台,页面会加载该图片并进行展示。

示例2:限制上传文件大小

接下来介绍一个示例,该示例限制了上传文件的大小,如果上传文件大小超出限制则会返回错误信息。代码如下:

const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

const server = http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    // 创建formidable实例
    const form = new formidable.IncomingForm();

    // 限制上传文件的大小
    form.maxFileSize = 10 * 1024 * 1024; // 限制上传文件最大为10MB

    // 解析上传的文件数据
    form.parse(req, (err, fields, files) => {
      if (err) throw err;

      // 在这里处理上传的文件
      const oldpath = files.file.path;
      const newpath = './uploads/' + files.file.name;

      fs.rename(oldpath, newpath, (err) => {
        if (err) throw err;

        res.write('File uploaded and moved!');
        res.end();
      });
    });

    // 监听文件大小超过限制的事件
    form.on('error', (err) => {
      res.write(`Error: ${err.message}`);
      res.end();
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="/upload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="file"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

在这个示例中,我们通过设置form.maxFileSize来限制了上传文件的大小,如果上传文件超过限制,formidable会抛出错误并触发form.on('error')事件,我们可以在事件处理函数中返回错误信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS使用formidable实现文件上传 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js 中使用fetch 按JSON格式发post请求的问题解析

    下面是详细的“Node.js 中使用fetch 按JSON格式发post请求的问题解析”的攻略: 1. 什么是 fetch fetch 是浏览器原生提供的一种数据获取机制,用来请求和获取网络资源。它采用 Promise 设计,支持链式调用,使用更方便。在 Node.js 中,我们需要通过 node-fetch 模块,才能使用 fetch 函数。 2. 使用 …

    node js 2023年6月8日
    00
  • Node.js入门笔记 之async模块

    下面是关于“Node.js入门笔记之async模块”的完整攻略: Async模块简介 Async是Node.js中一个常用的流程控制工具,它可以协调多个异步操作的执行顺序,方便我们在Node.js中处理一系列异步操作。Async提供了一系列的函数来处理异步操作,例如串行执行、并行执行、任务队列等。 Async模块的安装 在使用Async模块之前,需要先安装它…

    node js 2023年6月8日
    00
  • 基于nodejs+express(4.x+)实现文件上传功能

    实现文件上传功能是Web开发中常见的需求之一。本文档将详细讲解如何使用nodejs+express(4.x+)实现文件上传功能。 1. 安装express(4.x+)和multer 在开始使用express和multer之前,需要先确保它们已经安装在你的电脑上。 可以通过npm来进行安装: npm install express multer –save …

    node js 2023年6月8日
    00
  • Node.js + Redis Sorted Set实现任务队列

    下面是关于“Node.js + Redis Sorted Set实现任务队列”的完整攻略。 什么是任务队列 任务队列是一种用于处理异步任务的机制,在异步任务处理过程中,时常需要将任务放到队列中依次执行。常见的任务队列应用场景有多种,例如:邮件投递、消息提醒等。在这些场景下,任务的执行需要满足先进先出的原则。 Redis Sorted Set Redis So…

    node js 2023年6月8日
    00
  • Node.js用readline模块实现输入输出

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境。在Node.js环境中,可以使用readline模块实现输入输出。下面我来详细讲解如何使用readline模块。 readline模块概述 readline模块是Node.js核心模块之一,用于读取用户输入和输出文本。对于使用Node.js进行开发的应用程序,readline模块可…

    node js 2023年6月8日
    00
  • JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结

    JS对象与JSON互转换: JS对象和JSON都是用来表示数据的形式,其中JS对象是在JS代码中使用的,而JSON则是用于数据交换的一种格式。在JS中,可以使用JSON.parse()方法将JSON字符串转换成JS对象,使用JSON.stringify()方法将JS对象转换成JSON字符串。 下面是将JSON字符串转换成JS对象的示例代码: const js…

    node js 2023年6月8日
    00
  • vue中wangEditor5编辑器的基本使用

    Vue中wangEditor5编辑器的基本使用攻略 安装wangEditor5 通过npm进行安装 npm install wangeditor –save 引入wangEditor 在Vue项目的入口文件main.js中引入wangEditor,并且将它挂载到Vue实例上去。 “` import Vue from ‘vue’ import WangEd…

    node js 2023年6月9日
    00
  • npm安装依赖报错ERESOLVE unable to resolve dependency tree的解决方法

    下面是详细讲解“npm安装依赖报错ERESOLVE unable to resolve dependency tree的解决方法”的完整攻略。 问题背景 在使用npm安装依赖时,有时会出现如下错误提示: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部