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 相关文章推荐
Opacity.js
Jan 22 Javascript
在js中使用"with"语句中跨frame的变量引用问题
Mar 08 Javascript
window.dialogArguments 使用说明
Apr 11 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
详解js前端代码异常监控
Jan 11 Javascript
Three.js基础学习之场景对象
Sep 27 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
深入解析koa之中间件流程控制
Jun 17 Javascript
解决vue打包后vendor.js文件过大问题
Jul 03 Javascript
node.js实现上传文件功能
Jul 15 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绘图之生成饼状图的方法
2015/01/24 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python操作redis的方法
2015/07/07 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Python随机函数random()使用方法小结
2018/04/29 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python每天定时运行某程序代码
2019/08/16 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
python实现贪吃蛇双人大战
2020/04/18 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
Python高并发和多线程有什么关系
2020/11/14 Python
Java如何读取CLOB字段
2013/10/10 面试题
酒店总经理助理职责
2014/02/12 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
梅花魂教学反思
2014/04/25 职场文书
环保建议书作文300字
2015/09/14 职场文书
Python绘制分类图的方法
2021/04/20 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python