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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
JavaScript 编写匿名函数的几种方法
Feb 21 Javascript
jQuery选择器的工作原理和优化分析
Jul 25 Javascript
js自执行函数的几种不同写法的比较
Aug 16 Javascript
jQuery简单实现banner图片切换
Jan 02 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
Nov 24 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
JS面向对象之多选框实现
Jan 17 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 读取shell管道传输过来的内容
2010/03/01 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
webpack打包js的方法
2018/03/12 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
python中对list去重的多种方法
2014/09/18 Python
Python中return语句用法实例分析
2015/08/04 Python
浅谈python中set使用
2016/06/30 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
Python实现异步IO的示例
2020/11/05 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
酒店保安领班职务说明书
2014/03/04 职场文书
组工干部演讲稿
2014/09/02 职场文书
旷课检讨书范文
2014/10/30 职场文书
2014年社区工作总结
2014/11/18 职场文书
素质拓展训练感想
2015/08/07 职场文书
五年级语文教学反思
2016/03/03 职场文书
Python基本数据类型之字符串str
2021/07/21 Python
详解redis在微服务领域的贡献
2021/10/16 Redis
Python学习之异常中的finally使用详解
2022/03/16 Python