位置: 编程技术 - 正文

基于Node的React图片上传组件实现实例代码(node react vue)

编辑:rootadmin

推荐整理分享基于Node的React图片上传组件实现实例代码(node react vue),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs reactor,node react vue,nodejs reactjs,node react,node react,nodejs reactor,nodejs reactor,react基于nodejs,内容如对您有帮助,希望把文章链接给更多的朋友!

写在前面

红旗不倒,誓把JavaScript进行到底!今天介绍我的开源项目 Royal 里的图片上传组件的前后端实现原理(React + Node),花了一些时间,希望对你有所帮助。

前端实现

遵循React 组件化的思想,我把图片上传做成了一个独立的组件(没有其他依赖),直接import即可。

uri 参数是必须传的,是图片上传的后端接口地址,接口怎么写下面会讲到。

渲染页面

组件render部分需要体现三个功能:

图片选取(dialog窗口) 可拖拽功能(拖拽容器) 可预览(预览列表) 上传按钮 (button) 上传完成图片地址和链接 (信息列表)

主render函数

渲染图片预览列表

渲染图片上传信息列表

文件上传

前端要实现图片上传的原理就是通过构建FormData对象,把文件对象append()到该对象,然后挂载在XMLHttpRequest对象上 send() 到服务端。

获取文件对象

获取文件对象需要借助 input 输入框的 change 事件来获取 句柄参数 e

然后做以下处理:

这时 files 就是 我们需要的文件对象组成的数组,把它 concat 到原有的 files里。

如此,接下来的操作 就可以 通过 this.state.files 取到当前已选中的 图片文件。

利用Promise处理异步上传

文件上传对于浏览器来说是异步的,为了处理 接下来的多图上传,这里引入了 Promise来处理异步操作:

上传进度计算

利用XMLHttpRequest对象发异步请求的好处是可以 计算请求处理的进度,这是fetch所不具备的。

我们可以为 xhr.upload 对象的 progress 事件添加事件监听:

说明:idx参数是纪录多图上传队列的索引

拖拽上传

拖拽文件对于HTML5来说其实非常简单,因为它自带的几个事件监听机制可以直接做这类处理。主要用到的是下面三个:

基于Node的React图片上传组件实现实例代码(node react vue)

取消拖拽时的浏览器行为:

处理拖拽进来的文件:

多图同时上传

支持多图上传我们需要在组件调用处设置属性:

然后我们可以使用 Promise.all() 处理异步操作队列:

好了,前端工作已经完成,接下来就是Node的工作了。

后端实现

为了方便,后端采用的是express框架来快速搭建Http服务和路由。具体项目见我的github node-image-upload。逻辑虽然简单,但还是有几个可圈可点的地方:

跨域调用

本项目后端采用的是express,我们可以通过 res.header() 设置 请求的 “允许源” 来允许跨域调用:

设置为 * 说明允许任何 访问源,不太安全。建议设置成 你需要的 二级域名,如 jafeney.com。

除了 “允许源” ,其他还有 “允许头” 、”允许域”、 “允许方法”、”文本类型” 等。常用的设置如下:

ES6下的Ajax请求

ES6风格下的Ajax请求和ES5不太一样,在正式的请求发出之前都会先发一个 类型为 OPTIONS的请求 作为试探,只有当该请求通过以后,正式的请求才能发向服务端。

所以服务端路由 我们还需要 处理这样一个 请求:

注意:该请求同样需要设置跨域。

处理上传

处理上传的图片引人了multiparty模块,用法很简单:

图片处理

Node处理图片需要引入 gm 模块,它需要用 npm 来安装:

BUG说明

注意:node的图形操作gm模块前使用必须 先安装 imagemagick 和 graphicsmagick,Linux (ubuntu)上使用apt-get 安装:

MacOS上可以用 Homebrew 直接安装:

预设尺寸

有些时候除了原图,我们可能需要把原图等比例缩小作为预览图或者缩略图。这个异步操作还是用Promise来实现:

重命名图片

为了方便排序和管理图片,我们按照 “年月日 + 时间戳 + 尺寸” 来命名图片:

至于图片尺寸 使用 gm的 size() 方法来获取,处理方式如下:

总结

对于大前端的工作,理解图片上传的前后端原理仅仅是浅层的。我们的口号是 “把JavaScript进行到底!”,现在无论是 ReactNative的移动端开发,还是NodeJS的后端开发,前端工程师可以做的工作早已不仅仅是局限于web页面,它已经渗透到了互联网应用层面的方方面面,或许,叫 全栈工程师 更为贴切吧。

标签: node react vue

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

上一篇:nodejs multer实现文件上传与下载(node javascript)

下一篇:Node.js 异步异常的处理与domain模块解析(node中异步编程模式使用什么捕获异常)

  • 间接税和直接税哪个容易转嫁
  • 小规模纳税人不动产租赁税率
  • 税控服务费减免政策
  • 购入包装物计入
  • 实收资本的印花税怎么交
  • 购进货物用于在建工程要交增值税吗
  • 自己可以缴纳社保吗
  • 销售商品的会计分录现金折扣
  • 金融企业发放贷款时发生的交易费用
  • 企业股权无偿划转是否征税
  • 年金计算个税需要扣除吗
  • 公司是否可以开电子发票
  • 17点增值税发票能开吗
  • 进项转出滞纳金规定
  • 税法关于劳务费用的规定
  • 普票6个点怎么算
  • 在会计上其他业务是什么
  • 电子钥匙到期怎么办
  • 金蝶的币别和汇率怎么取消
  • 代缴社保缴费基数是怎么算的
  • 控股子公司是
  • 金税盘减免税款可以抵扣销项税吗
  • 关于员工表彰奖励的方案
  • Linux怎么在目录中创建文件
  • 合作社实际没有法人代表
  • 退回的企业所得税怎么做账
  • 增值税留抵退税政策2023
  • 固定资产未计提完毕怎么报废
  • 今天春节是什么生肖
  • 劳务公司账务处理办法
  • 支付国外佣金税率是多少
  • 损益类账户年末一定无余额对吗
  • zen框架
  • 土地增值税扣除项目税金包括哪些
  • vue关闭路由
  • 获取谷歌浏览器cookie
  • find命令详解查找文件
  • 如何用php操作mysql
  • 网络销售税率怎么算
  • 旅游景点的门票能做费用吗
  • c语言中使用指针的好处
  • 子公司减资是利好还是利空
  • 建筑劳务公司需要什么资质
  • 行程单入账多久钱能到账
  • 银行付款明细
  • 增值税多缴税款可以抵缴以后
  • 进口货物如何入账
  • 运费不支付会怎么样
  • 小规模纳税人去年免税,红冲后今年开多少税率的发票
  • 工资费用核算的原始记录有
  • 车辆使用费包括油费吗
  • 资产负债表各项目占比
  • 待认证进项税额和待抵扣进项税额的区别
  • 如何结转生产成本及制造费用
  • 预包装食品是否可以称重销售吗
  • 银行利息增值税发票申请单怎么填
  • 存出投资款应计入什么科目
  • 发票打印格式调整方法
  • 旅游业餐饮业
  • 卡片式账簿的优点是能够避免账页散失
  • 商业企业采购商品会计分录
  • 卡巴斯基反病毒软件
  • freebsd 升级
  • win8怎么停止自动更新
  • win8.1 ie浏览器
  • windows更新后桌面没反应
  • win8纯净版32位
  • html的基本语法规则
  • unity双击
  • 深入linux内核架构与底层原理 pdf
  • window.open()参数传递及获取
  • 批处理倒计时30秒内打开文件a,否则30秒后执行文件b
  • 收到123660的短信是什么意思
  • 怎么撤销税务三方协议
  • 税务上的工会经费是必须交的吗?
  • 上海税务开户
  • 辽宁省银监局长
  • 物业监控不完善怎么提意见
  • 北京中关村海淀医院属于北京几环?
  • 什么是审计的重要特征,也是审计的精髓
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设