Node.js HTTP服务器中的文件、图片上传的方法

Node.js提供了http模块作为内置的HTTP服务器,在其中可以实现文件上传和图片上传的功能。以下是完整攻略:

文件上传

前置条件

在实现文件上传之前,需要安装formidable模块。可以通过运行以下命令安装:

npm install formidable

代码示例

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

http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = new formidable.IncomingForm();
    form.parse(req, (err, fields, files) => {
      if (err) {
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Internal Server Error');
        return;
      }
      const oldPath = files.file.path;
      const newPath = `${__dirname}/uploaded_files/${files.file.name}`;
      fs.rename(oldPath, newPath, (err) => {
        if (err) {
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Internal Server Error');
          return;
        }
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('File uploaded successfully');
      });
    });
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not found');
  }
}).listen(3000);

代码说明

  1. 首先,我们创建了一个HTTP服务器,监听在端口3000并处理请求:

javascript
http.createServer((req, res) => {
// 处理请求
}).listen(3000);

  1. 使用formidable模块处理文件上传后的POST请求:

javascript
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
// 处理文件上传
});
}

注意,这里的/upload是上传的接口地址,需要和html文件中的form action属性或其他POST请求中的URL保持一致。

  1. 把上传的文件保存在服务器中:

javascript
const oldPath = files.file.path;
const newPath = `${__dirname}/uploaded_files/${files.file.name}`;
fs.rename(oldPath, newPath, (err) => {
// 处理保存操作
});

__dirname是全局变量,表示当前脚本文件所在的目录,${__dirname}/uploaded_files表示上传的文件需要保存到该目录下。fs.rename方法将上传的文件从原有的临时路径移动到指定路径uploaded_files中。

  1. 返回处理结果:

javascript
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('File uploaded successfully');

HTTP标准中规定了状态码和响应头,这里返回了状态码200(OK)和响应头Content-Type: text/plain,具体返回的内容是File uploaded successfully

图片上传

前置条件

在实现图片上传之前,同样需要安装formidable模块。除此之外,还需要在html代码中添加一个form表单,指定enctype属性为multipart/form-data

代码示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>图片上传页面</title>
</head>

<body>
  <h2>上传图片</h2>
  <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="image">
    <br>
    <input type="submit" value="上传">
  </form>
</body>

</html>
const http = require('http');
const fs = require('fs');
const formidable = require('formidable');

http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = new formidable.IncomingForm();
    form.parse(req, (err, fields, files) => {
      if (err) {
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Internal Server Error');
        return;
      }
      const oldPath = files.image.path;
      const newPath = `${__dirname}/uploaded_images/${files.image.name}`;
      fs.rename(oldPath, newPath, (err) => {
        if (err) {
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Internal Server Error');
          return;
        }
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write(`<img src="uploaded_images/${files.image.name}" width="400" />`);
        res.end();
      });
    });
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not found');
  }
}).listen(3000);

代码说明

  1. 在html中添加form表单,并指定enctype为multipart/form-data

```html




```

注意,这里的action属性值需要和Node.js中实现的上传接口地址保持一致。

  1. 在服务器中获取上传的图片并保存:

javascript
const oldPath = files.image.path;
const newPath = `${__dirname}/uploaded_images/${files.image.name}`;
fs.rename(oldPath, newPath, (err) => {
// 处理保存操作
});

注意,这里的image是html中inputname,需要和上传接口中的参数名保持一致。

  1. 返回处理结果:

javascript
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write(`<img src="uploaded_images/${files.image.name}" width="400" />`);
res.end();

返回的是一个img标签,显示刚上传的图片,src指向刚才保存的图片地址,可以根据实际情况修改路径。

这两个示例均可以通过post方式发送数据,Node.js服务器接收到数据后,通过formidable模块解析收到的数据,获取数据内容并进行相应的处理,实现了上传的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js HTTP服务器中的文件、图片上传的方法 - Python技术站

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

相关文章

  • js获取多个tagname的节点数组

    获取多个tagname的节点数组在 JavaScript 中非常常见,通常可以通过 document.getElementsByTagName() 方法来实现。 该方法接收一个 tagName 参数,返回一个包含所有指定 tagName 的元素节点列表。 以下是一个基本示例,演示如何使用 document.getElementsByTagName() 方法获…

    node js 2023年6月8日
    00
  • 从零学习node.js之详解异步控制工具async(八)

    下面我来详细讲解一下“从零学习node.js之详解异步控制工具async(八)”这篇文章的完整攻略。 文章概述 本篇文章主要介绍了async模块中常用的几种异步控制工具,包括waterfall、parallel、series和auto四种。通过结合具体的实例说明了这些工具的用法和注意事项。 详细内容 首先,文章介绍了async.waterfall的用法和示例…

    node js 2023年6月8日
    00
  • Node.js基础入门之缓存区与文件操作详解

    《Node.js基础入门之缓存区与文件操作详解》是一篇介绍Node.js中缓存区和文件操作的基础内容的教程。本篇攻略主要分为以下几部分: Node.js中的缓存区是什么?如何使用缓存区? Node.js中的文件操作是什么?如何读写文件? 两条示例说明 1.Node.js中的缓存区 1.1 什么是缓存区? 在Node.js中,缓存区指代的是一个用于临时存储数据…

    node js 2023年6月8日
    00
  • 使用npm发布Node.JS程序包教程

    使用 npm 发布 Node.js 程序包的教程大致可以分为以下几步: 1. 注册npm账号 首先,你需要在 npm 的官方网站上注册一个账户,网址是:https://www.npmjs.com/signup。注册成功后,你需要在命令行中使用 npm login 命令登陆该账户。如果你已经有了账户,在命令行中输入 npm whoami 命令验证登录状态。 2…

    node js 2023年6月8日
    00
  • NodeJS收发GET和POST请求的示例代码

    下面就是关于“NodeJS收发GET和POST请求的示例代码”的详细攻略: 1. NodeJS 监听 HTTP 请求 在 NodeJS 中,可以通过 http 模块来做 web 服务器,这样就可以监听 HTTP 请求并进行相应的处理,从而实现接收和发送请求的功能,代码如下所示: const http = require(‘http’); const serv…

    node js 2023年6月8日
    00
  • 解决Nodejs全局安装模块后找不到命令的问题

    当我们使用npm全局安装某个模块时,有时候我们会遇到找不到命令的问题。这是由于Node.js全局安装路径未在系统PATH环境变量中设置的缘故。我们可以按照以下步骤来解决这个问题: 1.找到全局安装路径 使用以下命令可以查看当前Node.js全局安装的路径: npm root -g 该命令会输出Node.js全局安装路径,例如: /usr/local/lib/…

    node js 2023年6月8日
    00
  • JS中的模糊查询功能

    下面是关于JS中模糊查询功能的完整攻略。 什么是模糊查询 模糊查询是指可以在不明确指定查询条件的情况下,自动查找与指定字符串相似的内容。例如,我们在搜索引擎中输入关键字时,就会出现相关的搜索结果,这就是利用了模糊查询功能。 在JS中,我们可以利用一些方法来实现对字符串的模糊查询。 JS字符串方法 在JS中,有一些字符串方法可以帮助我们实现模糊查询功能,下面来…

    node js 2023年6月8日
    00
  • VUE+node(express)实现前后端分离

    介绍 前后端分离是一种流行的应用架构,它将前端和后端的代码分别放置在不同的服务器上,通过 API 接口来进行通信。这种架构方式具有很多优点,比如可以提高应用的并发能力、减小服务器压力、便于扩展性等等。下面我将介绍如何使用VUE和Node.js的Express实现前后端分离。 前端实现 步骤一:安装VueCLI 为了快速创建Vue.js应用程序,我们需要先安装…

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