返回顶部
首页 > 资讯 > 服务器 >Node.js 中怎么向HTTP服务器中上传文件和图片
  • 442
分享到

Node.js 中怎么向HTTP服务器中上传文件和图片

2024-04-02 19:04:59 442人浏览 薄情痞子
摘要

这期内容当中小编将会给大家带来有关node.js 中怎么向Http服务器中上传文件和图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTTP协议中的文件上传最早的HTT

这期内容当中小编将会给大家带来有关node.js 中怎么向Http服务器中上传文件和图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

HTTP协议中的文件上传

最早的HTTP协议中是不支持文件上传的,在1995年制定的rfc1867规范中,在HTTP POST请求的内容类型Content-Type中扩展了multipart/fORM-data类型,该类型用于向服务器发送二进制数据,以便支持文件的上传。

POST上传文件

我们通过form表单提交文件时,会构造类似像下面这样一个表单:

<form enctype="multipart/form-data" action="_URL_" method="POST">
 <input name="userfile1" type="file">
 <input type="submit" value="发送文件">
</form>

在使用form提交表单数据时,默认的编码格式为application/x-www-form-urlencoded,上传文件时需要通过enctype属性将编码方式设置为multipart/form-data。

HTTP数据提交与服务器数据解析

在包含请求体的请求中,提交的数据会按指定编码类型进行编码,而客户端会按编码方式设置请求头中的Content-Type字段。
在一个application/x-www-form-urlencoded编码的请求中,会设置一个如下的请求头:

Content-Type:application/x-www-form-urlencoded

而用于文件上传的编码方式multipart/form-data,会设置一个如下的请求头:

Content-type: multipart/form-data, boundary=AaB03x

服务器数据接收与解析

对于一个编码方式为application/x-www-form-urlencoded的请求来说,会对提交内容进行URL编码。服务器会收到类似如下内容:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: itbilu.com
Content-Length: 23
Connection: Keep-Alive
Cache-Control: max-age=0

key1=value1&key2=value2

请求头与请求体之间会有一个空行,服务器会对请求体以queryString的方式进行解码。

而对一个multipart/form-data的文件上传请求来说,收到的内容类似如下:

POST / HTTP/1.1
Content-Type: multipart/form-data; boundary=----WEBKitFormBoundaryYN9YYwO9ESipYBIx
Accept-Encoding: gzip, deflate
Host: itbilu.com
Content-Length: 22646
Connection: Keep-Alive
Cache-Control: max-age=0

------WebKitFormBoundaryoqBx9oYBhx4SF1YQ
Content-Disposition: form-data; name="myName"

itbilu.com
------WebKitFormBoundaryYN9YYwO9ESipYBIx
Content-Disposition: form-data; name="upload"; filename="41GiLecHO3L.jpg"
Content-Type: image/jpeg

����JFIF��C // 文件的二进制数据
……
--------WebKitFormBoundaryYN9YYwO9ESipYBIx--

在请求头的Content-Type字段中,除了编码类型为multipart/form-data描述外,还有一个boundary属性,这是客户端随机生成的一个数据边界描述。

如上所示,文件上传时内容是分段传输的,每一boundary表示一个fild(form表单控值)边界。

如上面示例所示,上传文件时除内容描述外还包含一个的Content-Type文件MIME的描述,其后是一个空行和文件的二进制数据。所有的表单数据结束后,会有一个”–”+boundary+”–”结束符。而服务器接收到数据后,同样会根据boundary来进行数据的接收和解析。

Node.js中处理图片/文件上传

node.js中处理文件上传的第三方模块,本站曾经介绍过使用formidable模块处理文件上传,下面简单介绍使用Node.js原生环境处理图片上传,上传文件时也可以参考处理。

首先,使用Node.js的HTTP模块创建一个HTTP服务器:

const http = require('http');
const fs = require('fs');
const util = require('util');
const querystring =require('querystring');

//用http模块创建一个http服务端
http.createServer(function(req, res) {
 if (req.url == '/upload' && req.method.toLowerCase() === 'get') {
  //显示一个用于文件上传的form
  res.writeHead(200, {'content-type': 'text/html'});
  res.end(
   '<form action="/upload" enctype="multipart/form-data" method="post">'+
    '<input type="file" name="upload" multiple="multiple" />'+
    '<input type="submit" value="Upload" />'+
   '</form>'
  );
 } else if (req.url == '/upload' && req.method.toLowerCase() === 'post') {
  if(req.headers['content-type'].indexOf('multipart/form-data')!==-1)
   parseFile(req, res)
  } else {
   res.end('其它提交方式');
  }
}).listen(3000);

在这一步中,我们创建HTTP 服务器,当GET请求时,会加载一上用于文件上传的form表单。上传文件会通过POST方式提交到服务器,这时服务端会通过parseFile函数解析并保存文件,其解析代码如下:

function parseFile (req, res) {
 req.setEncoding('binary');
 var body = '';  // 文件数据
 var fileName = ''; // 文件名
 // 边界字符串
 var boundary = req.headers['content-type'].split('; ')[1].replace('boundary=','');
 req.on('data', function(chunk){
  body += chunk;
 });

 req.on('end', function() {
  var file = querystring.parse(body, '\r\n', ':')

  // 只处理图片文件
  if (file['Content-Type'].indexOf("image") !== -1)
  {
   //获取文件名
   var fileInfo = file['Content-Disposition'].split('; ');
   for (value in fileInfo){
    if (fileInfo[value].indexOf("filename=") != -1){
     fileName = fileInfo[value].substring(10, fileInfo[value].length-1);

     if (fileName.indexOf('\\') != -1){
      fileName = fileName.substring(fileName.lastIndexOf('\\')+1);
     }
     console.log("文件名: " + fileName);
    }
   }

   // 获取图片类型(如:image/gif 或 image/png))
   var entireData = body.toString();
   var contentTypeRegex = /Content-Type: image\/.*/;

   contentType = file['Content-Type'].substring(1);

   //获取文件二进制数据开始位置,即contentType的结尾
   var upperBoundary = entireData.indexOf(contentType) + contentType.length;
   var shorterData = entireData.substring(upperBoundary);

   // 替换开始位置的空格
   var binaryDataAlmost = shorterData.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

   // 去除数据末尾的额外数据,即: "--"+ boundary + "--"
   var binaryData = binaryDataAlmost.substring(0, binaryDataAlmost.indexOf('--'+boundary+'--'));

   // 保存文件
   fs.writeFile(fileName, binaryData, 'binary', function(err) {
    res.end('图片上传完成');
   });
  } else {
   res.end('只能上传图片文件');
  }
 });
}

req是一个IncomingMessage对象,而该对象又实现了ReadableStream,所以我们可以用流的方式来接收数据。数据接收完成了,按rfc1867规范进行了数据处理,并通过fs模块保存了文件。

上述就是小编为大家分享的Node.js 中怎么向HTTP服务器中上传文件和图片了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网服务器频道。

--结束END--

本文标题: Node.js 中怎么向HTTP服务器中上传文件和图片

本文链接: https://lsjlt.com/news/74517.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node.js 中怎么向HTTP服务器中上传文件和图片
    这期内容当中小编将会给大家带来有关Node.js 中怎么向HTTP服务器中上传文件和图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTTP协议中的文件上传最早的HTT...
    99+
    2024-04-02
  • 在Node.js中使用HTTP上传文件的方法
    开发环境 我们将使用 Visual Studio Express 2013 for Web 作为开发环境, 不过它还不能被用来做 Node.js 开发。为此我们需要安装 Node.js Tools for ...
    99+
    2022-06-04
    上传文件 方法 Node
  • node.js中怎么实现kindEditor图片上传功能
    要在node.js中实现KindEditor的图片上传功能,可以使用以下步骤: 安装express框架和multer模块: np...
    99+
    2024-03-02
    node.js
  • vue中实现图片和文件上传功能
    本篇文章为大家展示了vue中实现图片和文件上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html页面<input type="fi...
    99+
    2024-04-02
  • PHP中怎么上传图片
    PHP中怎么上传图片,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先我们开始判断文件类型是否为图片类型用到的函数{  strrchr:查找...
    99+
    2023-06-17
  • 怎么向华为云服务器上传文件
    向华为云服务器上传文件可以通过以下几种方式: 使用华为云服务器提供的Web API。如果您已经在您的华为云服务器上使用了相同的API,您可以从华为云服务器的网站上获取Web API页面。 使用华为云服务器提供的数据同步功能。华为云服务器...
    99+
    2023-10-26
    华为 上传文件 服务器
  • NodeJS中怎么将文件或图像上传到服务器
    这期内容当中小编将会给大家带来有关NodeJS中怎么将文件或图像上传到服务器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建空白的Node JS Web应用程序在package.json中设置依赖关系开...
    99+
    2023-06-17
  • 怎么向华为云服务器上传文件呢
    首先,登录华为云控制台,进入“文件上传”功能。在“上传”页面中,您可以选择上传文件的存储位置和文件类型,并设置上传时间和大小限制。 在选择的存储位置中,您可以选择将文件上传到云服务器上的哪个文件夹,也可以设置文件上传的权限和过期时间。 在...
    99+
    2023-10-28
    华为 上传文件 服务器
  • 怎么向华为云服务器上传文件夹
    如果你想将文件上传到华为云上的指定文件夹,可以按照以下步骤进行: 登录华为云账号,进入华为云应用管理页面,选择要上传的文件夹。 在文件上传页面上,点击“添加文件”按钮。 在弹出的对话框中,选择要上传的文件。 点击“上传”按钮,上传所选文...
    99+
    2023-10-28
    华为 文件夹 上传
  • Node.js和express怎么实现上传大文件
    这篇“Node.js和express怎么实现上传大文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js和expr...
    99+
    2023-07-04
  • Node.js 版本中如何使用HTTP上传G 级的文件之
    Node.js 版本中如何使用HTTP上传G 级的文件之 ,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。不管喜欢与否,javascript无处...
    99+
    2024-04-02
  • 怎么向华为云服务器上传文件到手机上
    要将文件从华为云服务器上传到手机上,您可以按照以下步骤进行操作: 首先,您需要在手机上下载一个文件管理器应用程序,例如 ES 文件浏览器或 Solid Explorer。 在华为云服务器上,找到您要上传的文件,并将其复制到剪贴板中。 打...
    99+
    2023-10-26
    华为 机上 上传文件
  • 怎么向华为云服务器上传文件夹呢
    打开华为云服务器的控制台应用程序。在控制台应用程序中,找到“上传”选项。 点击“上传”按钮,选择要上传的文件夹。 在弹出的上传界面中,选择要上传的文件夹和上传方式。可以选择单文件上传或批量上传。 确认选择后,点击“开始上传”按钮,等待服务...
    99+
    2023-10-28
    华为 文件夹 上传
  • PHP中怎么批量上传图片
    这期内容当中小编将会给大家带来有关PHP中怎么批量上传图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP批量上传图片的代码如下:<html> <head><t...
    99+
    2023-06-17
  • PHP中怎么上传多张图片
    这篇文章将为大家详细讲解有关PHP中怎么上传多张图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基本实现算法是使用数组的形式,把所有的图片提交个一个数组,对数组的元素进行一个个的处理。PH...
    99+
    2023-06-17
  • vue怎么将图片上传到服务器
    这篇文章主要介绍“vue怎么将图片上传到服务器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么将图片上传到服务器”文章能帮助大家解决问题。一、准备工作下载 vue-quill-editorn...
    99+
    2023-06-27
  • php怎么上传图片到指定文件夹
    在PHP中,可以使用`move_uploaded_file`函数将上传的图片移动到指定的文件夹。首先,确保你的HTML表单中有一个带...
    99+
    2023-10-11
    php
  • vue中怎么实现一个上传图片组件
    本篇文章给大家分享的是有关vue中怎么实现一个上传图片组件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.首先得有一个[type=file]...
    99+
    2024-04-02
  • vue2使用 tinymce富文本编辑器-图片上传、粘贴图片上传致服务器
    安装tinymce富文本编辑器插件 npm i tinymce npm i @tinymce/tinymce-vue 创建Editor.js文件 封装组件 以便使用 impor...
    99+
    2023-09-04
    前端 javascript vue
  • node.js怎么使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js怎么使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作