NodeJS使用formidable实现文件上传

yizhihongxing

下面是详细讲解“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中如何使用 ES6

    在 Node 中使用 ES6 有以下几步: 步骤1:安装对应版本的 Node 首先,要确保安装的 Node 版本兼容 ES6 的语法。如果安装的是旧版本的 Node,则无法使用 ES6。 可以在 Node 的官方网站(https://nodejs.org/zh-cn/)下载最新的 LTS 版本。或者使用 Node 版本管理器 nvm(https://gith…

    node js 2023年6月8日
    00
  • Node.js实现的简易网页抓取功能示例

    下面是关于“Node.js实现的简易网页抓取功能示例”的完整攻略。 简易网页抓取功能介绍 网页抓取是一种用于自动化获取互联网上的信息的技术,它可以帮助我们快速、准确地从网页中提取所需的内容。而Node.js作为一款高性能的JavaScript运行环境,也提供了强大的网页抓取功能,下面就来介绍一下如何使用Node.js实现简易网页抓取功能。 实现步骤 步骤一:…

    node js 2023年6月8日
    00
  • JS实现添加,替换,删除节点元素的方法

    要实现JS对节点元素的添加、替换、删除,可以使用DOM操作相关API。 添加节点元素 可以使用createElement()方法创建新的节点元素,并使用appendChild()方法将其添加到指定的父元素下。 // 创建新的节点元素 var newElement = document.createElement(‘p’); // 设置节点文本 newElem…

    node js 2023年6月8日
    00
  • 面向JavaScript入门初学者的二叉搜索树算法教程

    下面是“面向JavaScript入门初学者的二叉搜索树算法教程”的完整攻略: 什么是二叉搜索树 二叉搜索树(Binary Search Tree,简称BST)是一种基于二分查找的数据结构,它满足下列性质: 左子树上所有结点的值均小于它的根结点的值; 右子树上所有结点的值均大于它的根结点的值; 左右子树也分别为BST; 没有重复的结点。 二叉搜索树的插入操作 …

    node js 2023年6月8日
    00
  • Nodejs对postgresql基本操作的封装方法

    Node.js对PostgreSQL基本操作的封装方法可以通过以下步骤实现: 1. 安装依赖 在使用Node.js操作PostgreSQL之前,需要安装相应的依赖库。可以使用npm安装pg模块,它是Node.js对PostgreSQL操作的封装库。 npm install pg 2. 连接PostgreSQL数据库 在使用Node.js操作PostgreSQ…

    node js 2023年6月8日
    00
  • node.js平台下的mysql数据库配置及连接

    下面是详细的攻略: node.js平台下的mysql数据库配置及连接 简介 MySQL是一种广泛使用的关系型数据库管理系统,在Web开发中扮演着重要的角色。而在Node.js平台下,可以通过MySQL模块提供的API来实现MySQL数据库的配置和连接。 安装 在开始之前,需要先安装mysql模块。在命令行中使用以下命令安装: npm install mysq…

    node js 2023年6月8日
    00
  • ESLint和Jest中使用esm示例详解

    ESLint和Jest中使用esm示例详解 简介 ESLint是一个开源的JavaScript代码检查工具,它的目标是保证代码的一致性和避免错误。ESLint支持插件,我们可以使用它来编写自定义规则,以便强制执行代码的有效性和可读性。 Jest是一个流行的JavaScript测试框架,可用于测试React、Vue等前端框架以及Node.js应用程序等等,其功…

    node js 2023年6月8日
    00
  • nodejs的安装使用与npm的介绍

    Node.js是一个能够在服务器端运行JavaScript的开放源代码,跨平台的运行环境。它是构建在Chromium的V8 JavaScript引擎上的。 安装Node.js 1. Windows环境下的安装 在Windows环境下,你可以直接在Node.js官网(https://nodejs.org/en/)下载Windows安装包,根据安装向导完成安装。…

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