React中上传图片到七牛的示例代码


Posted in Javascript onOctober 10, 2017

之前有写过类似的一篇文章,有位同学突然找来解惑,发现自己采用了另外的一个方法,这里也分享下,希望对使用reactjs的同学有帮助。

逻辑思路是这样子的,在componentDidMount中实现更新dom的操作,异步加载需要的资源文件,然后在加载完后实现qiniu的初始化操作。这里就不需要在webpack或者其他打包工具中去引入qiniu的包文件,导致打完包的文件过大了。

我这里使用了nodejs的库scriptjs,

const $S = require('scriptjs');

可以实现异步的加载文件,当然你也可以使用你认为更好的,当然也别忘记告诉我下。以下为代码实现部分:

async componentDidMount() {

 let uploadToken = await this.getUploadToken();

 $S([
  'https://dn-kdjz.qbox.me/js/plupload/2.1.1/plupload.full.min.js',
  'https://dn-kdjz.qbox.me/js/qiniu-js-sdk/1.0.17.2/qiniu.min.js'
 ], 'uploadBundle');

 $S.ready('uploadBundle', () => {

  // 证件合影
  let options1 = {
   runtimes: 'html5,flash,html4',
   browse_button: 'photoId',
   uptoken: uploadToken,
   get_new_uptoken: false,
   domain: 'https://xxxx.xxxxxx', // bucket域名,下载资源时用到,必需
   container: 'photoIdContainer', // 上传区域DOM ID,默认是browser_button的父元素
   max_file_size: '100mb', // 最大文件体积限制
   flash_swf_url: '/js/plupload/2.2.1/Moxie.swf', //引入flash,相对路径
   max_retries: 3, // 上传失败最大重试次数
   dragdrop: true, // 开启可拖曳上传
   drop_element: 'photoIdContainer', // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
   chunk_size: '4mb', // 分块上传时,每块的体积
   auto_start: true, // 选择文件后自动上传,若关闭需要自己绑定事件触发上传
   init: {
    'FilesAdded': (up, files) => {
     plupload.each(files, function(file) {
      // 文件添加进队列后,处理相关的事情
     });
    },
    'BeforeUpload': (up, file) => {
     // 每个文件上传前,处理相关的事情
    },
    'UploadProgress': (up, file) => {
     // 每个文件上传时,处理相关的事情
    },
    'FileUploaded': async(up, file, info) => {
     // 查看简单反馈
     let domain = up.getOption('domain');
     let res = JSON.parse(info);
     let sourceLink = await this.getDownloadUrl(res.key);
     this.setState({
      photoIdKey: res.key,
      photoId: sourceLink
     })
    },
    'Error': (up, err, errTip) => {
     //上传出错时,处理相关的事情
     console.log(err);
    },
    'UploadComplete': () => {
     //队列文件处理完毕后,处理相关的事情
     console.log('上传完成');
    },
    'Key': (up, file) => {
     let timestamp = parseInt((new Date().valueOf() / 1000));
     // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
     // 该配置必须要在unique_names: false,save_key: false时才生效
     let key = `idcard/${timestamp}_${file.name}`;
     return key
    }
   }
  };
  // 第一个按钮
  const uploader1 = Qiniu.uploader(options1);
 })
}

这里有个getUploadToken方法,这个方法是根据官方文档的策略实现了一个获取上传token的方法,此方法是通过访问服务端的接口来获取token。具体实现过程可以参考官方。如果大家有任何疑问请给我留言,小编会及时回复大家的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
js下用eval生成JSON对象
Sep 17 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
jQuery animate easing使用方法图文详解
Jun 17 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
利用node.js实现自动生成前端项目组件的方法详解
Jul 12 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
基于对象合并功能的实现示例
Oct 10 #Javascript
聊聊Vue.js的template编译的问题
Oct 09 #Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 #Javascript
Angular2监听页面大小变化的解决方法
Oct 09 #Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 #Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 #Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 #Javascript
You might like
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
AM/FM收音机的安装与调试
2021/03/02 无线电
建立动态的WML站点(一)
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
php并发加锁示例
2016/10/17 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
Vue 实现树形视图数据功能
2018/05/07 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
国际象棋商店:The Chess Store
2018/07/09 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python