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 相关文章推荐
简单的js分页脚本
May 21 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
Jun 21 Javascript
让复选框只能选择一项的方法
Oct 08 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
使用javaScript实现鼠标拖拽事件
Apr 03 Javascript
微信小程序表单验证功能完整实例
Dec 01 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
Apr 28 Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 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执行sql语句的写法
2009/03/10 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JS中Location使用详解
2015/05/12 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
python动态加载变量示例分享
2014/02/17 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
学校个人对照检查材料
2014/08/26 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL