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日

相关文章

  • Node.js 基础教程之全局对象

    下面是针对“Node.js 基础教程之全局对象”的完整攻略。 全局对象 在Node.js中,有一个名为“全局对象”的概念,它是一个拥有所有全局属性和方法的对象,也就是说,在Node.js中,我们可以直接通过全局对象来访问这些属性和方法。在众多的全局对象中,我们最常用的是: console:控制台对象,用于输出各种类型的信息。 process:进程对象,用于处…

    node js 2023年6月8日
    00
  • 2020字节跳动前端面试题一面解析(附答案)

    下面是针对“2020字节跳动前端面试题一面解析(附答案)”这篇文章的详细讲解完整攻略。 一、题目链接和基本信息 首先,我们需要提供文章链接和基本信息。这是为了方便读者获取原始资料,了解面试题目的来源和出题方。 文章链接:https://mp.weixin.qq.com/s/FBmhI1tnDRQglfp5XFKKEw出题方:字节跳动前端团队 二、题目分析和答…

    node js 2023年6月8日
    00
  • Express框架实现简单拦截器功能示例

    下面是Express框架实现简单拦截器功能示例的完整攻略。 什么是拦截器? 在软件开发中,拦截器即中间件,用于在处理请求和响应之前拦截请求,进行某些业务逻辑处理。常见的应用包括身份验证、数据验证、日志记录等。 Express框架中的拦截器功能 Express框架通过中间件来实现拦截器功能,中间件是一个函数,它可以访问请求对象(request object)、…

    node js 2023年6月8日
    00
  • 浅谈Nodejs应用主文件index.js

    下面我来详细讲解“浅谈Nodejs应用主文件index.js”的完整攻略。 在Node.js中,应用程序的主要或入口文件通常被命名为index.js。这个文件是应用程序的主要控制器。在index.js文件中,定义和处理应用的各种功能。 下面就是index.js的基本结构: const express = require(‘express’); const a…

    node js 2023年6月8日
    00
  • Linux安装Nodejs的三大方法(建议源码安装)

    下面是详细讲解“Linux安装Nodejs的三大方法(建议源码安装)”的完整攻略。 Linux安装Nodejs的三大方法 据统计,在全球范围内,约70%的网站采用的是Node.js作为后端编程语言,受到了广大开发者和企业的高度认可,可见其受欢迎程度之高。那么,如何在Linux系统上安装Node.js呢?下面我们将讲解三种方法。 方法一:使用系统包管理器安装 …

    node js 2023年6月8日
    00
  • 利用Node.js批量抓取高清妹子图片实例教程

    下面是“利用Node.js批量抓取高清妹子图片实例教程”的完整攻略。 一、概述 本攻略将教会你如何使用Node.js批量抓取高清妹子图片。具体来说,我们将使用Node.js中的request和cheerio模块来完成这项工作。 二、准备工作 在开始建立我们的Node.js应用程序之前,我们需要先安装Node.js和一些模块。确保您已经在本地安装了Node.j…

    node js 2023年6月8日
    00
  • 利用nodejs监控文件变化并使用sftp上传到服务器

    下面是关于利用Node.js监控文件变化并使用SFTP上传到服务器的完整攻略。 准备工作 在开始我们的攻略之前,需要先准备以下工作: 首先,需要确保你已经安装了Node.js环境。 然后,安装chokidar和ssh2-sftp-client两个npm包,分别用于文件监控和SFTP上传。 可以使用以下命令进行安装: npm install chokidar …

    node js 2023年6月8日
    00
  • 如何通过javaScript去除字符串两端的空白字符

    要通过javaScript去除字符串两端的空白字符,可以使用String对象提供的trim()方法。以下是完整攻略: 1. 使用trim()方法去除字符串两端的空白字符 trim()方法可以去除字符串的两端空白字符(包括空格、制表符、换行符等)。使用方法如下: var str = " hello world! "; str = str.t…

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