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事件问题
Sep 05 Javascript
JS文本框不能输入空格验证方法
Mar 19 Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
Dec 16 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
Apr 06 Javascript
jquery读取xml文件实现省市县三级联动的方法
May 29 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
详解如何使用koa实现socket.io官网的例子
Nov 04 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
js实现点赞按钮功能的实例代码
Mar 06 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 microtime获取浮点的时间戳
2010/02/21 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
Javascript Object.extend
2010/05/18 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python简单实现基数排序算法
2015/05/16 Python
Python实现配置文件备份的方法
2015/07/30 Python
Python二分查找详解
2015/09/13 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
几道Web/Ajax的面试题
2016/11/05 面试题
婚礼新郎父母答谢词
2014/01/16 职场文书
投标邀请书范文
2014/01/31 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
《秋思》教学反思
2016/02/23 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js