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

yizhihongxing

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实现抽红包并分配代码实例

    下面就为您详细讲解基于JS实现抽红包并分配的完整攻略。 一、技术准备 在实现抽红包功能之前,我们需要进行一些技术准备: HTML页面:用于显示抽奖界面和抽奖结果; CSS:用于页面的美化; JavaScript:对抽奖进行控制和实现; 二、实现思路 实现抽红包并分配的方法有很多,但这里我们将介绍一种比较简单的方法: 在HTML页面中设计好抽奖界面,包括奖项列…

    node js 2023年6月8日
    00
  • node.js的exports、module.exports与ES6的export、export default深入详解

    node.js的exports、module.exports与ES6的export、export default深入详解 简介 在 Node.js 中,我们可以通过模块系统(Module System)来定义和使用模块。模块可以是一个文件或用 npm 安装的一个包。在模块中,我们可以导出(Export)一些变量、函数或类,供其他模块使用。 在 Node.js…

    node js 2023年6月8日
    00
  • 详解如何使用webpack在vue项目中写jsx语法

    以下是详解如何在Vue项目中使用Webpack写JSX语法的攻略: 什么是JSX语法 JSX语法是一种JavaScript语言扩展语法,允许我们在JavaScript中编写类似HTML的结构和语法,使得UI组件的结构和行为更容易被读懂和修改,是React(一个JavaScript库,用于构建用户界面)中常用的语法。 如何在Vue项目中使用JSX语法 使用JS…

    node js 2023年6月9日
    00
  • Nodejs搭建多进程Web服务器实现过程

    Node.js是一个基于Chrome V8引擎运行JavaScript的开发平台,通过Node.js构建Web应用可以实现高并发、高可靠性,且易于开发和部署。本攻略旨在介绍如何使用Node.js搭建多进程Web服务器,以实现更高的并发量和更佳的性能表现。 一、多进程Web服务器的优劣 多进程Web服务器的优势在于多进程之间可以相互独立,互不干扰,可以有效地充…

    node js 2023年6月8日
    00
  • node.js中的fs.lstat方法使用说明

    下面是“node.js中的fs.lstat方法使用说明”的完整攻略。 目录 什么是fs.lstat方法? 如何使用fs.lstat方法? fs.lstat方法的示例 示例一:获取文件的类型 示例二:遍历文件夹 什么是fs.lstat方法? fs.lstat() 方法用于获取指定路径文件或目录的相关信息,包括文件类型、大小、权限等信息。与 fs.stat() …

    node js 2023年6月8日
    00
  • TypeScript开发Node.js程序的方法

    TypeScript开发Node.js程序的方法 TypeScript是一种由微软开发的语言,它是JavaScript的一个超集。它允许开发人员使用静态类型和其他高级语言功能来编写更健壮和可维护的JavaScript代码。本文将讲述如何使用TypeScript编写Node.js应用程序。 步骤1:安装TypeScript 在开始使用TypeScript编写N…

    node js 2023年6月8日
    00
  • nodejs教程 安装express及配置app.js文件的详细步骤

    下面是关于“nodejs教程 安装express及配置app.js文件的详细步骤”的完整攻略。 1. 安装express 首先,你需要在本地机器上安装Node.js和npm。接下来,打开命令行或终端,输入以下命令进行全局安装express: npm install -g express 2. 构建应用程序骨架 安装完express后,你可以通过以下命令来构建…

    node js 2023年6月8日
    00
  • Node.js进程退出的深入理解

    Node.js进程退出的深入理解 Node.js进程退出是一个非常重要的问题,在应用程序开发中经常会遇到各种问题,例如应用程序崩溃、进程无法退出等等,所以我们需要深入理解Node.js进程退出的原理及技巧,以避免这些问题的发生。 Node.js进程退出的原理 在Node.js中,进程的退出分为两种情况: 程序正常退出 程序异常退出 在程序正常退出的情况下,可…

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