热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用Node处置惩罚文件上传

媒介在Web开辟中,文件上传是一个异常罕见、异常主要的功用。本文将引见如何用Node处置惩罚上传的文件。需求剖析由于如今前后端星散很盛行,那末本文也直接采纳前后端星散的做法。前端界

媒介

在Web开辟中,文件上传是一个异常罕见、异常主要的功用。本文将引见如何用Node处置惩罚上传的文件。

需求剖析

由于如今前后端星散很盛行,那末本文也直接采纳前后端星散的做法。前端界面以下:
《用Node处置惩罚文件上传》

用户从浏览器中挑选文件,点击上传,将提议http要求到效劳器,效劳器将接受到的文件存储在效劳器硬盘中。

前端部份

ajax要求库采纳axios,为了简化申明,前端限定上传的文件范例只能为图片,且一次只能上传一张,有兴致的朋侪可以自行补充,代码以下:






,我们看到控制台打印出了前端上传的imgName属性:kitty.jpg
《用Node处置惩罚文件上传》

而且,myImage文件夹目录下多了一张图片:
《用Node处置惩罚文件上传》

翻开一看,恰是夙昔端上传的那张kitty.jpg

文件更名

我们发明,这个默许的文件称号并非我们想要的,我们想改成以当前时刻戳定名的文件,增加的功用代码以下:

var fs = require('fs')
form.on('file', (name, file) => {
// 重定名文件
let types = file.name.split('.')
let suffix = types[types.length - 1]
fs.renameSync(file.path, './myImage/' + new Date().getTime() + '.' + suffix)
})

再次上传,发明如今存的照片称号已变成我们想要的花样了。
《用Node处置惩罚文件上传》

增加上传进度

Formidable的progress事宜能给出收到的字节数,以及希冀收到的字节数。我们可以借助这个做出一个进度条。
我们为上面的顺序增加下面的代码,每次有progress事宜引发,就会盘算百分比并用console.log()输出:

form.on('progress', (bytesReceived, bytesExpected) => {
var percent = Math.floor(bytesReceived / bytesExpected * 100)
console.log(percent)
})

再次上传一张图片,如今控制台已会打印出进度显现了:
《用Node处置惩罚文件上传》

固然,平常情况下,我们是要把这个进度传回到用户的浏览器中去,这关于任何想要上传大型文件的顺序来说是个很棒的特征,而且这是个很适合用Node完成的使命。比如说用WebSocket协定,或许像Socket.IO如许的及时模块,关于Node中运用websocket,背面我会单独出一篇文章来引见。

毛病处置惩罚

任何时刻都不要忘了对顺序增加毛病处置惩罚,假如你的顺序在主要的时刻崩掉了,可以轻则被老板打屁股,重则拉出去祭天。设想一下,假如用户上传的图片很大,而且用户的收集还很慢,那末上传的时刻会超越前端代码中设置的要求超时时刻2s,效劳器就会崩掉,不信?我们来试一下。
起首,我挑选了一张很大的图片,5M,而且用chrome浏览器将浏览器收集环境设置为slow 3g,设置要领以下:
f12翻开开辟者东西,在more tools–network conditions
《用Node处置惩罚文件上传》

《用Node处置惩罚文件上传》

点击上传,我们瞥见效劳端控制台的信息以下,效劳器崩掉了:
《用Node处置惩罚文件上传》

所以,末了我们加上了毛病处置惩罚,代码以下:

// 加上毛病处置惩罚,防备用户收集慢,或许作废上传,致使效劳器崩掉
form.on('error', err => {
console.log(err)
res.statusCode = 500
res.end('效劳器内部毛病!')
})

小结

如今,置信你已学会了如何用Node处置惩罚文件上传了,连系前面的那篇用Node供应静态文件效劳的文章,你是否是可以本身探索着去尝试做一些风趣的事变了呢?

参考浏览

formidable文档
input的file范例的accept属性


推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
author-avatar
手机用户2502871803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有