浅谈node实现图片上传的方法

本篇文章给大家介绍一下node实现图片文件上传的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

浅谈node实现图片上传的方法

相关推荐:《nodejs 教程》

在web开发中,文件上传是一个很重要的问题,尤其是图片上传,以及由此延伸的“进度条”、“文件大小”、以及著名的“跨域”等问题。

本demo演示的是图片的上传,服务器代码为node。

前端部分

    Title            let file = ''    let fileName = ''    function submit() {      let data = new FormData()      data.append('imgName', fileName)      data.append('img', file)      axios({        method: 'post',        timeout: 2000,        url: 'http://localhost:8081/postApi',        data: data      })        .then(response => {          console.log(response.data)        })        .catch(error => {          console.log(error)        })    }    function changeImg(e) {      file = e.target.files.item(0)   //只能选择一张图片      // 如果不选择图片      if (file === null) {        return      }      fileName = file.name    }  

登录后复制

用axios发送请求 —— 其实我们这里也可以采用另一种“跨域请求方式”(vue-resource),但这里我想了想。还是采用 后端设置跨域 的方式。

后端部分

这是本文要介绍的重点,为了用高效流畅的方式来解析文件上传请求,我们先引入formidable库:

npm install formidable --save

登录后复制

formidable的流式解析器让它成为了处理文件上传的绝佳选择,也就是说它能随着数据块的上传接收它们,解析它们,并吐出特定的部分,相信熟悉流的朋友会很好理解。这种方式不仅快,还不会因为需要大量缓冲而导致内存膨胀,即便像视频这种大型文件,也不会把进程压垮。
当然,我们要创建myImage文件,用于存放上传的图片,接着,我们创建一个IncomingForm实例form,并且设置存放路径为myImage文件夹。代码如下:

const http=require('http');const formidable=require('formidable');var server=http.createServer(function(req,res){// 后端设置跨域res.setHeader('Access-Control-Allow-Origin','*');res.setHeader('Access-Control-Allow-Headers','Content-Type');res.setHeader('Content-Type','application/json');switch(req.method){case 'OPTIONS':res.statusCode=200;res.end();break;case 'POST':upload(req,res);break;}})function upload(req,res){if(!isFormData(req)){res.statusCode=400;res.end('请求错误,请使用multipart/form-data格式');return;}var form=new formidable.IncomingForm();// 设置上传图片保存文件form.uploadDir='./myImage';form.keepExtensions=true;form.on('field',(field,value)=>{console.log(field);console.log(value);})form.on('end',()=>{res.end('上传完成!');})form.parse(req);}function isFormData(req){let type=req.headers['content-type'] || '';return type.includes('multipart/form-data');}server.listen(8081,function(){console.log('port is on 8081');})

登录后复制

6、7、8三行setHeader尤其重要,这是后端跨域的精髓!

添加上传进度

这个也是我们常用的,并且所希望看到的!这会给用户极好的体验感。
我们只要在上面代码中添加:

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

登录后复制

然后把这个进度传回到用户的浏览器中去,即可。

formidable

formidable模块实现了上传和编码图片和视频。它支持GB级上传数据处理,支持多种客户端数据提交。有极高的测试覆盖率,非常适合在生产环境中使用。
formidable模块的方法和属性 —— 围绕:Formidable.incomingForm()

可以通过该方法创建一个form表单:

var form = new formidable.IncomingForm();

登录后复制

通过encoding属性设置字段编码

form.encoding='utf-8';

登录后复制

通过uploadDir设置上传文件时临时文件存放的位置,默认上传的临时文件存放的位置为os.tmpDir();

form.uploadDir='/tmp/';

登录后复制

通过keepExtensions属性可以设置文件上传时临时文件的文件名是否包括扩展名。如果该值为真,即为包括扩展名,否则,就不包括扩展名。

form.keepExtensions=false

登录后复制

还有比较重要的“ parse方法 ”:解析node.js中request请求中包含的form表单提交的数据。cb为处理请求的回调函数(不必须)。

form.parse(req,function(err,fields,files){    //...});

登录后复制

更多编程相关知识,请访问:编程视频!!

以上就是浅谈node实现图片上传的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2717226.html

(0)
上一篇 2025年3月7日 22:02:22
下一篇 2025年2月24日 08:37:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • node卸载命令是什么

    node卸载命令是“sudo apt-get remove nodejs npm”。卸载方法:先使用命令删除一次;然后进入“usr”下的“local”、“lib”、“include”文件夹,删除里面所有node和node_modules。 …

    2025年3月7日
    200
  • Node+UDP实现图片裁剪功能

    本篇文章给大家介绍一下nodejs+udp实现图片裁剪功能的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《nodejs 教程》 说起来UDP,可能最吸引人的就是【UDP服务器】了吧。 UDP服务器可以用…

    2025年3月7日
    200
  • 总结Nodejs开发中常用的一些模块

    本篇文章给大家介绍一下一些nodejs开发中常用的模块。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 收集了NodeJS开发中常用的一些模块。 MVC框架 – Express Express 是轻量灵活的No…

    2025年3月7日
    200
  • socket.io如何即时通信前端配合Node

    本篇文章给大家详细介绍一下socket.io即时通信前端配合node的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 首先看效果,哈哈哈 还是那么的小 首先我们需要 新建文件夹 并快速生成一个package.json…

    2025年3月7日 编程技术
    200
  • 如何升级或修改nodejs的版本

    本篇文章给大家介绍一下升级或修改nodejs的版本的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 升级或者修改nodejs的版本 有时候我们需要被迫的升级或者降级nodejs的版本,这个时候就问题来了,怎么弄呢,总…

    2025年3月7日
    200
  • Node.js如何实现断点续传

    本篇文章给大家介绍一下实现node.js断点续传的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 平常业务需求:上传图片、Excel等,毕竟几M的大小可以很快就上传到服务器。针对于上传视频等大文件几百M或者几G的大小…

    2025年3月7日
    200
  • 什么是Deno?与Node.js的区别是什么?

    deno是为解决node的一些内在问题而创建的,那么与node.js的区别是什么?下面本篇文章带大家详细了解一下deno,介绍一下deno和node.js的区别。 【推荐学习:《nodejs 教程》】 Node.js的作者Ryan Dahl…

    2025年3月7日
    200
  • 什么是KOA框架?详解实现koa2的四大模块

    koa是一个基于node实现的一个新的web框架,本篇文章给大家介绍一下koa2框架,带大家理解和实现一个koa框架需要实现四个大模块。 什么是koa框架? koa是一个基于node实现的一个新的web框架,它是由express框架的原班人…

    2025年3月7日
    200
  • Node版本管理工具–nvm-windows的使用方法(windows环境)

    如何降低node.js的版本?本篇文章给大家介绍一下node版本管理工具–nvm-windows的安装,以及使用nvm-windows来管理node版本,进行版本切换的方法。 由于业务需求需要降低node的版本,但是网上找了一大…

    2025年3月7日 编程技术
    200
  • node文件怎么写成npm包并发布出去?

    node文件怎么写成npm包?下面本篇文章给大家介绍一下把node文件拷贝写成npm包并发布出去的方法,希望对大家有所帮助! 把node文件拷贝写成npm包,并发布 npm插件发布 发布npm其实是一件很简单的事情,只是因为长时间不发布会忘…

    2025年3月7日
    200

发表回复

登录后才能评论