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 相关文章推荐
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
JS 数字转换研究总结
Dec 26 Javascript
js console.log打印对像与数组用法详解
Jan 21 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
简单快速的实现js计算器功能
Aug 17 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
d3绘制基本的柱形图的实现代码
Dec 12 Javascript
JavaScript中的回调函数实例讲解
Jan 27 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
Vue如何实现变量表达式选择器
Feb 18 Vue.js
基于对象合并功能的实现示例
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
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php内存缓存实现方法
2015/01/24 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
jquery text()要注意啦
2009/10/30 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
python实现DES加密解密方法实例详解
2015/06/30 Python
Python字符串处理实例详解
2017/05/18 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python Tensor和Array对比分析
2020/01/08 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
Python如何获取文件路径/目录
2020/09/22 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
行政管理专业推荐信
2013/11/02 职场文书
村官工作鉴定评语
2014/01/27 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
Python竟然能剪辑视频
2021/05/25 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript