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 相关文章推荐
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
JavaScript通过正则表达式实现表单验证电话号码
Mar 07 Javascript
Javascript小技巧之生成html元素
May 15 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
再谈Javascript中的异步以及如何异步
Aug 19 Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
react redux入门示例
Apr 19 Javascript
Vue中的字符串模板的使用
May 17 Javascript
微信小程序结合mock.js实现后台模拟及调试
Mar 28 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 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
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
如何用SQL语句进行模糊查找
2015/09/25 面试题
党员的自我评价范文
2014/01/02 职场文书
应用英语专业自荐信
2014/01/26 职场文书
单位委托书范本
2014/04/04 职场文书
集中整治工作方案
2014/05/01 职场文书
5s标语大全
2014/06/23 职场文书
假期安全教育广播稿
2014/10/04 职场文书
大雁塔英文导游词
2015/02/10 职场文书