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中的数学函数集合
May 08 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
js+css3实现旋转效果
Jan 20 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
May 03 Javascript
浅谈jQuery框架Ajax常用选项
Jul 08 jQuery
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
JavaScript实现串行请求的示例代码
Sep 14 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 获取客户端的真实ip
2009/11/30 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
javascript实现拖放效果
2015/12/16 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis