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对象的property和prototype是什么一种关系
Aug 06 Javascript
javascript 命名空间以提高代码重用性
Nov 13 Javascript
sails框架的学习指南
Dec 22 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 Javascript
JS实现躲避粒子小游戏
Jun 18 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
Aug 14 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 array_filter除去数组中的空字符元素
2020/06/21 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
php里array_work用法实例分析
2015/07/13 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
新郎新娘婚礼答谢词
2014/01/11 职场文书
会议接待欢迎词
2014/01/12 职场文书
旷课检讨书
2015/01/26 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
pycharm代码删除恢复的方法
2021/06/26 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
vue+echarts实现多条折线图
2022/03/21 Vue.js