iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Node.js实现文件上传
  • 299
分享到

Node.js实现文件上传

文件上传Nodejs 2022-06-04 17:06:21 299人浏览 安东尼
摘要

在工作中碰到了这样的需求,需要用nodejs 来上传文件,之前也只是知道怎么通过浏览器来上传文件, 用nodejs的话, 相当于模拟浏览器的行为。 Google 了一番之后, 明白了浏览器无非就是利用Htt

在工作中碰到了这样的需求,需要用nodejs 来上传文件,之前也只是知道怎么通过浏览器来上传文件, 用nodejs的话, 相当于模拟浏览器的行为。 Google 了一番之后, 明白了浏览器无非就是利用Http协议来给服务器传输数据, 具体协议就是《RFC 1867 - FORM-based File Upload in html》, 在浏览器上通过form 表单来上传文件就是通过这个协议,我们可以先看看浏览器给服务端发送了什么数据, 就可以依葫芦画瓢的把上传功能实现出来。说起form 表单上传文件的话, 大家应该很熟悉:


<form action="http://www.qq.com/" method="post">
<input type="text" name="text1" /><br />
<input type="text" name="text2" /><br />
<input type="submit" />
</form> 

提交时, 用fiddler 抓包可以看到向服务端发出这样的数据:

POST http://www.qq.com/ HTTP/1.1
Host: www.qq.com
Content-Length: 23
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

text1=hello&text2=world

值得注意的是Content-Type默认为application/x-www-form-urlencoded,所以消息会经过URL编码。比如“你好”会编码为 %E4%BD%A0%E5%A5%BD。

接下来我们看一下通过form 表单是怎么上传的。大家应该也不陌生:


<form action="http://www.qq.com" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" value="submit" />
</form>

然后新建一个只有hello world字样的upload.txt文本文件上传上去,我们再吃用fiddler 来抓下包, 可以发现发送过去的数据稍微复杂了一些(已经去掉了很多的其它没关系的请求行,比如缓存控制和cookie之类的):

POST http://www.qq.com/ HTTP/1.1
Host: www.qq.com
Content-Length: 199
Content-Type: multipart/form-data; boundary=----WEBKitFormBoundarywr3X7sXBYQQ4ZF5G

------WebKitFormBoundarywr3X7sXBYQQ4ZF5G
Content-Disposition: form-data; name="myfile"; filename="upload.txt"
Content-Type: text/plain

hello world

------WebKitFormBoundarywr3X7sXBYQQ4ZF5G--

根据RFC 1867的定义,我们需要生成一段边界数据,这个数据不能在内容的其它地方出现,这个可以自己定义, 在每个浏览器的生成算法可能都不一样, 上面的boundary就是分隔数据,生成了分隔数据之后, 就可以把分隔数据放在头部的Content-Type里面传送给服务端, 也就是上文的 Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywr3X7sXBYQQ4ZF5G, 另外,上传的内容,需要用分隔数据来分隔成若干个段,然后每段数据里面都有文件的文件名,还有上传时候的name,服务端就是用这个name来接收文件,还有文件的类型Content-Type,在这个例子里是 text/plain,如果上传的是png图片就是image/png。文件类型的一个空行后就是所上传的文件的内容,在这个例子里也是为了容易理解所以上传的是文本文件所以内容直接就能够显示出来,如果上传的是图片文件, 因为是二进制文件,fiddler 就显示的是乱码。 文件的内容结束之后就是一个空行再加上边界数据。

了解了发送格式的细节之后, 下一步就是使用nodejs来编程实现,简单来讲, 就是按照格式把数据发送给服务端就行了。


const http = require('http');
const fs = require('fs');
//post地址为本地服务的一个PHP,用于测试上传是否成功
var options = {
hostname: 'localhost',
port: 80,
path: '/get.php',
method: 'POST'
}
//生成分隔数据
var boundaryKey = '----WebKitFormBoundaryjLVkbqXtIi0YGpaB'; 
//读取需要上传的文件内容
fs.readFile('./upload.txt', function (err, data) {
//拼装分隔数据段
var payload = '--' + boundaryKey + 'rn' + 'Content-Disposition:form-data; name="myfile"; filename="upload.txt"rn' + 'Content-Type:text/plainrnrn';
payload += data;
payload += 'rn--' + boundaryKey + '--';
//发送请求
var req = http.request(options, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('body:' + chunk);
});
});
req.on('error', function(e) {
console.error("error:"+e);
});
//把boundary、要发送的数据大小以及数据本身写进请求
req.setHeader('Content-Type', 'multipart/form-data; boundary='+boundaryKey+'');
req.setHeader('Content-Length', Buffer.byteLength(payload, 'utf8'));
req.write(payload);
req.end();
});

本文重点在于了解协议并且用代码实现出来, 代码组织上面还有很多优化的地方。

最后在本地apache,简单写一个php来保存上传的文件来用作测试:


<?php
$filePath = './upload.txt';
move_uploaded_file($_FILES['myfile']['tmp_name'] , $filePath);
echo "ok";
?>

另外,根据RFC 1867 还可以实现一次上传多个文件的功能, 这个在这里就不详述, 需要的话可以详细参考RFC 1867来实现。

以上所述是小编给大家介绍的node.js实现文件上传,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

--结束END--

本文标题: Node.js实现文件上传

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js实现文件上传
    在工作中碰到了这样的需求,需要用nodejs 来上传文件,之前也只是知道怎么通过浏览器来上传文件, 用nodejs的话, 相当于模拟浏览器的行为。 google 了一番之后, 明白了浏览器无非就是利用htt...
    99+
    2022-06-04
    文件上传 Node js
  • Node.js实现文件上传的示例
    文件上传指的是将用户本地的文件上传到服务器中。 上传文件需要处理两个位置: 客户端 客户端如何上传文件? 上传文件的表单项需要指定为input,type是file 要上传文件必须将表单enc...
    99+
    2022-06-04
    示例 文件上传 Node
  • Node.js+express怎么实现上传大文件
    这篇“Node.js+express怎么实现上传大文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js+expr...
    99+
    2023-06-17
  • Node.js+express如何实现上传大文件
    小编给大家分享一下Node.js+express如何实现上传大文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:对于大...
    99+
    2022-10-19
  • Spring boot实现文件上传实例(多文件上传)
    文件上传主要分以下几个步骤:(1)新建maven java project;(2)在pom.xml加入相应依赖;(3)新建一个表单页面(这里使用thymleaf);(4)编写controller;(5)测试;(6)对上传的文件做一些限制;(...
    99+
    2023-05-31
    spring boot 文件上传
  • Node.js怎么实现上传大文件功能
    本篇内容主要讲解“Node.js怎么实现上传大文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js怎么实现上传大文件功能”吧!对于大文件的上传我们首先要引入一个叫做 multer...
    99+
    2023-07-04
  • Node.js和express怎么实现上传大文件
    这篇“Node.js和express怎么实现上传大文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js和expr...
    99+
    2023-07-04
  • node.js使用express-fileupload中间件实现文件上传
    目录初始化项目 编写服务器 初始化客户端 编写组件 FileUpload Message.js Progress.js 测试 本文使用express作为服务端,使用express-f...
    99+
    2022-11-12
  • node.js怎么使用express-fileupload实现文件上传
    这篇文章主要讲解了“node.js怎么使用express-fileupload实现文件上传”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js怎么使用express-fileuplo...
    99+
    2023-07-04
  • ASP.NET实现文件上传
    本文实例为大家分享了ASP.NET实现文件上传的具体代码,供大家参考,具体内容如下 .NET中C/S和B/S上传文件不同 B/S中文件上传和C/S中的文件上传性质完全不一样 在C/S...
    99+
    2022-11-13
  • vue实现文件上传
    本文实例为大家分享了vue实现文件上传的具体代码,供大家参考,具体内容如下 记录问题,方便回顾 1、使用elementUI的 el-upload插件进行上传。 2、使用input。 ...
    99+
    2022-11-13
  • PHP实现文件上传
    上传文件的必备三个条件: 上传到后台的文件 method = "post";(不可以为get方法) enctype = "multipart/form-data";(注意哦,是data,不是date) 三者缺一不可 后台PHP的$_FIL...
    99+
    2023-09-02
    php 服务器 开发语言
  • Node.js实现兼容IE789的文件上传进度条
    Nodejs对文件上传的处理 在Express4里req.files已经是undefined了;现在用的最多的可能就是formidable了,你知道了它有个progress事件,于是心中大喜,低版本IE的进...
    99+
    2022-06-04
    文件上传 进度条 Node
  • node.js如何使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js如何使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目...
    99+
    2023-06-20
  • node.js怎么使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js怎么使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本...
    99+
    2023-06-17
  • ASP.NETCore实现多文件上传
    创建应用程序 打开VS 2017   --新建 ASP.NET Core Web 应用程序     --Web 应用程序(模型视图控制器) 程序名字、路径,默认即可 删除不必要的内...
    99+
    2022-11-12
  • Python+django实现文件上传
    1、文件上传(input标签) (1)html代码(form表单用post方法提交) <input class="btn btn-primary col-md-1" style="margin:...
    99+
    2022-06-04
    文件上传 Python django
  • Java实现FTP文件上传
    目录一、配置FTP文件服务器 FTP两种模式简介 PORT(主动模式) Passive(被动模式) 1、安装vsftpd 2、配置vsftpd 3、重启启动服务 4、登录二、java...
    99+
    2022-11-12
  • Javaselenium上传文件的实现
    目录下载和安装AutoIt1.打开AutoIt的官网下载下载和安装AutoIt 文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,...
    99+
    2022-11-13
  • Ajax如何配合node.js multer实现文件上传功能
    小编给大家分享一下Ajax如何配合node.js multer实现文件上传功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!说明作为一个node 初学者,最近在做一个聊天软件,支持注册、登录、在线单人、多人聊天、表情发送、...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作