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 相关文章推荐
理解JavaScript变量作用域更轻松
Oct 25 Javascript
javascript下数值型比较难点说明
Jun 07 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
Jun 08 Javascript
javascript实例--教你实现扑克牌洗牌功能
May 15 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
JS实现3D图片旋转展示效果代码
Sep 22 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
js实现盒子移动动画效果
Aug 09 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP实现简易图形计算器
2020/08/28 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
详解python进行mp3格式判断
2016/12/23 Python
Python 专题一 函数的基础知识
2017/03/16 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python 实现矩阵填充0的例子
2019/11/29 Python
python getopt模块使用实例解析
2019/12/18 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
天网工程实施方案
2014/03/26 职场文书
房产继承公证书
2014/04/09 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
教师年终个人总结
2015/02/11 职场文书
售后服务质量承诺书
2015/04/29 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书