分享一个图片上传组件实现原理(React+Node)的实例教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了分享一个图片上传组件实现原理(React+Node)的实例教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9872字,纯文字阅读大概需要15分钟。
内容图文
本篇文章主要介绍了基于Node的React图片上传组件实现实例代码,非常具有实用价值,需要的朋友可以参考下写在前面
红旗不倒,誓把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来说其实非常简单,因为它自带的几个事件监听机制可以直接做这类处理。主要用到的是下面三个:
取消拖拽时的浏览器行为:
处理拖拽进来的文件:
多图同时上传
支持多图上传我们需要在组件调用处设置属性:
然后我们可以使用 Promise.all() 处理异步操作队列:
好了,前端工作已经完成,接下来就是Node的工作了。
后端实现
为了方便,后端采用的是express框架来快速搭建Http服务和路由。具体项目见我的github node-image-upload。逻辑虽然简单,但还是有几个可圈可点的地方:
跨域调用
本项目后端采用的是express,我们可以通过 res.header() 设置 请求的 “允许源” 来允许跨域调用:
设置为 * 说明允许任何 访问源,不太安全。建议设置成 你需要的 二级域名,如 jafeney.com。
除了 “允许源” ,其他还有 “允许头” 、”允许域”、 “允许方法”、”文本类型” 等。常用的设置如下:
ES6下的Ajax请求
ES6风格下的Ajax请求和ES5不太一样,在正式的请求发出之前都会先发一个 类型为 OPTIONS的请求 作为试探,只有当该请求通过以后,正式的请求才能发向服务端。
所以服务端路由 我们还需要 处理这样一个 请求:
注意:该请求同样需要设置跨域。
处理上传
处理上传的图片引人了multiparty模块,用法很简单:
图片处理
Node处理图片需要引入 gm 模块,它需要用 npm 来安装:
npm install gm --save
BUG说明
注意:node的图形操作gm模块前使用必须 先安装 imagemagick 和 graphicsmagick,Linux (ubuntu)上使用apt-get 安装:
sudo apt-get install imagemagick sudo apt-get install graphicsmagick --with-webp // 支持webp格式的图片
MacOS上可以用 Homebrew 直接安装:
brew install imagemagick brew install graphicsmagick --with-webp // 支持webp格式的图片
预设尺寸
有些时候除了原图,我们可能需要把原图等比例缩小作为预览图或者缩略图。这个异步操作还是用Promise来实现:
重命名图片
为了方便排序和管理图片,我们按照 “年月日 + 时间戳 + 尺寸” 来命名图片:
至于图片尺寸 使用 gm的 size() 方法来获取,处理方式如下:
总结
对于大前端的工作,理解图片上传的前后端原理仅仅是浅层的。我们的口号是 “把JavaScript进行到底!”,现在无论是 ReactNative的移动端开发,还是NodeJS的后端开发,前端工程师可以做的工作早已不仅仅是局限于web页面,它已经渗透到了互联网应用层面的方方面面,或许,叫 全栈工程师 更为贴切吧。
【相关推荐】
1. 免费js在线视频教程
2. JavaScript中文参考手册
3. php.cn独孤九贱(3)-JavaScript视频教程
以上就是分享一个图片上传组件实现原理(React + Node)的实例教程的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的分享一个图片上传组件实现原理(React+Node)的实例教程全部内容,希望文章能够帮你解决分享一个图片上传组件实现原理(React+Node)的实例教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。