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 全选效果实现代码
Mar 23 Javascript
JavaScript中的16进制字符(改进)
Nov 21 Javascript
文本框输入时 实现自动提示(像百度、google一样)
Apr 05 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
BootStrap3中模态对话框的使用
Jan 06 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
Jul 07 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 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
PHP中for循环语句的几种变型
2007/03/16 PHP
php利用事务处理转账问题
2015/04/22 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python中sys.argv函数精简概括
2018/07/08 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
如何使用PHP session
2015/04/21 面试题
我的动漫时代的创业计划书范文
2014/01/27 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
公司经理任命书
2014/06/05 职场文书
三八活动策划方案
2014/08/17 职场文书
岗位职责范本大全
2015/02/26 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python