位置: 编程技术 - 正文

在Node.js中使用HTTP上传文件的方法(node.js适用哪些场景)

编辑:rootadmin

推荐整理分享在Node.js中使用HTTP上传文件的方法(node.js适用哪些场景),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js的使用场景,node.js的使用场景,node.js怎么用,node.js使用教程,node.js怎么用,node.js使用教程,node.js使用教程,node.js使用教程,内容如对您有帮助,希望把文章链接给更多的朋友!

开发环境我们将使用 Visual Studio Express for Web 作为开发环境, 不过它还不能被用来做 Node.js 开发。为此我们需要安装 Node.js Tools for Visual Studio。 装好后 Visual Studio Express for Web 就会转变成一个 Node.js IDE 环境,提供创建这个应用所需要的所有东西.。而基于这里提供的指导,我们需要:

下载安装 Node.js Windows 版,选择适用你系统平台的版本, Node.js (x) 或者Node.js (x) 。 下载并安装 Node.js 的 Visual Studio 工具。

安装完成后我们就会运行 Visual Studio Express for Web, 并使用 Node.js 的交互窗口来验证安装. Node.js 的交互窗口可以再 View->Other Windows->Node.js Interactive Window 下找到. Node.js 交互窗口运行后我们要输入一些命令检查是否一切OK.

Figure 1 Node.js Interactive Window

现在我们已经对安装进行了验证,我们现在就可以准备开始创建支持GB级文件上传的Node.js后台程序了. 开始我们先创建一个新的项目,并选择一个空的 Node.js Web应用程序模板.

Figure 2 New project using the Blank Node.js Web Application template

项目创建好以后,我们应该会看到一个叫做 server.js 的文件,还有解决方案浏览器里面的Node包管理器 (npm).

图3 解决方案管理器里面的 Node.js 应用程序

server.js 文件里面有需要使用Node.js来创建一个基础的hello world应用程序的代码.

Figure 4 The Hello World application 我现在继续把这段代码从 server.js 中删除,然后在Node.js中穿件G级别文件上传的后端代码。下面我需要用npm安装这个项目需要的一些依赖:

Express - Node.js网页应用框架,用于构建单页面、多页面以及混合网络应用 Formidable - 用于解析表单数据,特别是文件上传的Node.js模块 fs-extra - 文件系统交互模块

图5 使用npm安装所需模块

模块安装完成后,我们可以从解决方案资源管理器中看到它们。

图6 解决方案资源管理器显示已安装模块

下一步我们需要在解决方案资源管理器新建一个 "Scripts" 文件夹并且添加 "workeruploadchunk.js" 和 "workerprocessfile.js" 到该文件夹。我们还需要下载jQuery 2.x 和 SparkMD5 库并添加到"Scripts"文件夹。 最后还需要添加 "Default.html" 页面。

创建Node.js后台

首先我们需要用Node.js的"require()"函数来导入在后台上传G级文件的模块。注意我也导入了"path"以及"crypto" 模块。"path"模块提供了生成上传文件块的文件名的方法。"crypto" 模块提供了生成上传文件的MD5校验和的方法。

下一行代码就是见证奇迹的时刻。

这行代码是用来创建express应用的。express应用是一个封装了Node.js底层功能的中间件。如果你还记得那个由Blank Node.js Web应用模板创建的"Hello World" 程序,你会发现我导入了"http"模块,然后调用了"http.CreateServer()"方法创建了 "Hello World" web应用。我们刚刚创建的express应用内建了所有的功能。

现在我们已经创建了一个express应用,我们让它呈现之前创建的"Default.html",然后让应用等待连接。

express应用有app.VERB()方法,它提供了路由的功能。我们将使用app.post()方法来处理"UploadChunk" 请求。在app.post()方法里我们做的第一件事是检查我们是否在处理POST请求。接下去检查Content-Type是否是mutipart/form-data,然后检查上传的文件块大小不能大于MB。

一旦我们成功通过了所有的检查,我们将把上传的文件块作为一个单独分开的文件并将它按顺序数字命名。下面最重要的代码是调用fs.ensureDirSync()方法,它使用来检查临时目录是否存在。如果目录不存在则创建一个。注意我们使用的是该方法的同步版本。

正如我之前提出的,我们可以通过两种方式上传文件到后端服务器。第一种方式是在web浏览器中使用FormData,然后把文件块作为二进制数据发送,另一种方式是把文件块转换成base编码的字符串,然后创建一个手工的multipart/form-data encoded请求,然后发送到后端服务器。

所以我们需要检查一下是否在上传的是一个手工multipart/form-data encoded请求,通过检查"CelerFT-Encoded"头部信息,如果这个头部存在,我们创建一个buffer并使用request的ondata时间把数据拷贝到buffer中。

在request的onend事件中通过将buffer呈现为字符串并按CRLF分开,从而从 multipart/form-data encoded请求中提取base字符串。base编码的文件块可以在数组的第四个索引中找到。

通过创建一个新的buffer来将base编码的数据重现转换为二进制。随后调用fs.outputFileSync()方法将buffer写入文件中。

二进制文件块的上传是通过formidable模块来处理的。我们使用formidable.IncomingForm()方法得到multipart/form-data encoded请求。formidable模块将把上传的文件块保存为一个单独的文件并保存到临时目录。我们需要做的是在formidable的onend事件中将上传的文件块保存为里一个名字。

app.get()方法使用来处理"MergeAll"请求的。这个方法实现了之前描述过的功能。

在Node.js中使用HTTP上传文件的方法(node.js适用哪些场景)

注意Node.js并没有提供String.padLeft()方法,这是通过扩展String实现的。

其中一件事是,发表上篇文章后我继续研究是为了通过域名碎片实现并行上传到CeleFT功能。域名碎片的原理是访问一个web站点时,让web浏览器建立更多的超过正常允许范围的并发连接。 域名碎片可以通过使用不同的域名(如web1.example.com,web2.example.com)或者不同的端口号(如, )托管web站点的方式实现。

示例中,我们使用不同端口号托管web站点的方式。

我们使用 iisnode 把 Node.js集成到 IIS( Microsoft Internet Information Services)实现这一点。 下载兼容你操作系统的版本 iisnode (x) 或者 iisnode (x)。 下载 IIS URL重写包。

一旦安装完成(假定windows版Node.js已安装),到IIS管理器中创建6个新网站。将第一个网站命名为CelerFTJS并且将侦听端口配置为。

图片7在IIS管理器中创建一个新网站

然后创建其他的网站。我为每一个网站都创建了一个应用池,并且给应用池“LocalSystem”级别的权限。所有网站的本地路径是C:inetpubwwwrootCelerFTNodeJS。

图片8 文件夹层级

我在Release模式下编译了Node.js应用,然后我拷贝了server.js文件、Script文件夹以及node_modules文件夹到那个目录下。 要让包含 iisnode 的Node.js的应用工作,我们需要创建一个web.config文件,并在其中添加如下得内容。

web.config中各项的意思是让iisnode处理所有得*.js文件,由server.js 处理任何匹配"/*"的URL。

如果你正确的做完了所有的工作,你就可以通过 "Default.html"页面。

下面的web.config项可以改善 iisnode中Node.js的性能。

并行上传

为了使用域名碎片来实现并行上传,我不得不给Node.js应用做些修改。我第一个要修改的是让Node.js应用支持跨域资源共享。我不得不这样做是因为使用域碎片实际上是让一个请求分到不同的域并且同源策略会限制我的这个请求。

好消息是XMLttPRequest 标准2规范允许我这么做,如果网站已经把跨域资源共享打开,更好的是我不用为了实现这个而变更在"workeruploadchunk.js"里的上传方法。

为了使server.js文件中得CORS可用,我创建了一个函数,该函数会创建必要的头以表明Node.js应用支持CORS。另一件事是我还需要表明CORS支持两种请求,他们是:

简单请求:

1、只用GET,HEAD或POST。如果使用POST向服务器发送数据,那么发送给服务器的HTTP POST请求的Content-Type应是application/x-www-form-urlencoded, multipart/form-data, 或 text/plain其中的一个。

2、HTTP请求中不要设置自定义的头(例如X-Modified等)

预检请求:

1、使用GET,HEAD或POST以外的方法。假设使用POST发送请求,那么Content-Type不能是application/x-www-form-urlencoded, multipart/form-data, or text/plain,例如假设POST请求向服务器发送了XML有效载荷使用了application/xml or text/xml,那么这个请求就是预检的。

2、在请求中设置自定义头(比如请求使用X-PINGOTHER头)。

在我们的例子中,我们用的是简单请求,所以我们不需要做其他得工作以使例子能够工作。

在 "workeruploadchunk.js" 文件中,我向 self.onmessage 事件添加了对进行并行文件数据块上传的支持.

在 Default.html 页面我对当前的URL进行了保存,因为我准备把这些信息发送给文件上传的工作程序. 只所以这样做是因为:

我想要利用这个信息增加端口数量 做了 CORS 请求,我需要把完整的 URL 发送给 XMLHttpRequest 对象.

最后修改了 CelerFT 接口来支持并行上传.

带有并行上传的CelerFT

这个项目的代码可以再我的 github 资源库上找到

使用Node.js实现HTTP 内容分片的教程 介绍在本文中,我会阐述HTTP状态分部分内容的基础概念,并使用Node.js一步步地实现它.我们还将用一个基于它用法最常见场景的示例来测试代码:一

使用Raygun对Node.js应用进行错误处理的方法 用我们的raygun4node包,能提供一种把您的Node.js错误发送给Raygun的便利办法.它可以很容仪的使用npm安装:npminstallraygun其能给您提供一个raygun客户端,您可

使用Node.js为其他程序编写扩展的基本方法 准备开始首先我们用下面的目录结构来创建一个节点通知(node-notify)文件夹..|--build/#Thisiswhereourextensionisbuilt.|--demo/|`--demo.js#ThisisademoNode.jsscripttotestourextensi

标签: node.js适用哪些场景

本文链接地址:https://www.jiuchutong.com/biancheng/377980.html 转载请保留说明!

上一篇:Node.js事件驱动(node drain事件)

下一篇:使用Node.js实现HTTP 206内容分片的教程(nodejs如何运行html)

  • 用友软件80端口被占用解决方法
  • 什么是进项加计扣除
  • 应付账款赊销率和周转率的区别
  • 税务规定先收款后开票,合同约定先收票再付款
  • 应收票据背书转让分录
  • 残保金申报在哪申报
  • 非独生子女赡养父母扣税
  • 其他收益会计分录
  • 如何区别文化体育业和娱乐业
  • 外商投资企业国内上市最新政策
  • 归集研发费用时怎么计算
  • 应交税金的期末余额怎么算
  • 租赁的土地被征迁
  • 更新改造过程中被替换部件的账面价值
  • 软件著作权如何入账
  • 劳动合同的主要条款
  • 中央空调可一次开多少度
  • 购买税友系统可以抵扣吗
  • 冲红发票开具
  • 专用发票百万元版申请要求
  • 土地计入无形资产包括的税费
  • 购入固定资产税费怎么算
  • 进项税额大于销项税额怎么办
  • 健身器材属于哪个部门管理
  • 个体工商户网上报税流程
  • 先扣社保再发工资可以吗
  • 党政机关接收企业赞助的规定
  • 预收一年的30万怎么算
  • php动态网站开发项目教程
  • 应交增值税减免税款包括什么
  • 竣工结算审计费计入什么科目
  • php files
  • 贵的u盘和便宜的有什么区别
  • 史上最贵的微博
  • 蓝湖怎么用的
  • 公司报亏损需要交税吗
  • 一天撸一个财务APP系统【安卓端+前端+后端】
  • 坏账准备税收调整
  • 银行存款也有窍门
  • 作为大学生你能为国家安全贡献哪些力量论文
  • 可解释深度学习:从感受野到深度学习的三大基本任务:图像分类,语义分割,目标检测,让你真正理解深度学习
  • 手把手怎么写
  • 比较好的微信名称有哪些
  • python中删除字典里的空项目
  • 织梦上传图片大小设置
  • 桶装矿泉水计入什么科目
  • SQL Server 2005 模板参数使用说明
  • 小额收据报销
  • 确认收入的时点包括
  • 暂估原材料,材料成本如何冲
  • 实收资本实务处理办法
  • 商贸企业 税收 政策规定
  • 投资性房地产改造期间计提折旧吗
  • 周转材料怎么做分录
  • 其他业务支出借方增加还是减少
  • 微信支付的账务在哪里
  • 经纪代理包括什么
  • 如何审计主营业务收入的真实性问题
  • 工资薪金个人所得税扣除标准
  • 应付??
  • 企业网银的电子对账未签约需要本人去吗
  • 房地产企业会计科目
  • 通过SQL Server的位运算功能巧妙解决多选查询方法
  • mysql改造
  • xp系统不能搜索
  • windows server 2008 r2有哪些特点
  • 图形工具的作用
  • ubuntu 15.04系统怎么安装qq?
  • winxp如何修改密码
  • win10各个版本的桌面
  • codeblocks视频教程
  • scrollWidth,clientWidth与offsetWidth的区别
  • javascript判断语句
  • js移动端拖拽
  • nodejs怎么调试
  • javascript 对象
  • 四川税务局网上办税
  • 北京市地方税务局2015第10号文件
  • 企业内部清欠的措施和做法
  • 税收优惠政策有经营和居民住宅出租
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设