react-uplod-img 是一个基于 React antd组件的图片上传组件 支持oss qiniu等服务端自定义获取签名,批量上传, 预览, 删除, 排序等功能

需要 react 版本大于 v16.1.0 支持async await

git地址

demo

安装

  1. npm i react-uplod-img --save

引入

  1. import UpImage from 'react-uplod-img'

调用

  1. const getOSSSign = (suffix,width,height, extraParam) => {
  2. const apiServerUrl = 'https://hp.bncry.cn/util/getAliyunSignature';
  3. const url = `${apiServerUrl}?${[
  4. `bizName=${extraParam.bizName}`,
  5. `suffix=${suffix}`,
  6. `width=${width}`,
  7. `height=${height}`,
  8. ].join('&')}`;
  9. return new Promise((resolve,reject)=>{
  10. fetch(url).then(async (response)=>{
  11. const res = await response.json();
  12. const formData = res.data;
  13. resolve({
  14. key: formData.dirPath,
  15. policy: formData.policy,
  16. OSSAccessKeyId: formData.OSSAccessKeyId,
  17. success_action_status: '200',
  18. callback: formData.callback,
  19. signature: formData.signature,
  20. });
  21. })
  22. })
  23. };
  24. const ossUploadConfig = {
  25. type:'oss',
  26. imageUploadServerHost: 'https://hp-file-lf.oss-cn-hangzhou.aliyuncs.com', //图片上传服务地址
  27. imageShowServiceHost: 'https://hp-file-lf.oss-cn-hangzhou.aliyuncs.com', // 图片查看地址前缀
  28. totalNum: 5,
  29. supportSort: true,
  30. value:'avatar/2018-10-10/f2b3ace0-cc33-11e8-8ad4-3550e70cc242_220_138.jpg;avatar/2018-10-10/f2b42210-cc33-11e8-8ad4-3550e70cc242_1080_1920.jpg;avatar/2018-10-10/f2b44920-cc33-11e8-8ad4-3550e70cc242_1280_719.jpg'
  31. };
  32. <UpImage getSign={getOSSSign} {...ossUploadConfig} extraParam={{bizName:"avatar"}}/>
配置项 类型 默认值 描述
type String oss 类型 目前支持 oss qiniu
imageUploadServerHost String 图片上传服务地址前缀
imageShowServiceHost String 图片查看服务地址前缀
maxSize Number 2048 图片大小限制 单位KB
totalNum Number 1 图片数量限制
supportSort Bool false 是否支持拖拽排序
extraParam Object 获取签名getSign方法 的第四个参数 供获取签名时 自定义入参
getSign Func (suffix,width,height, extraPara)=>{} 获取签名的方法 Promise
onChange Func (values)=>{} 图片上传成功时的回调 参数为图片的半路径;分隔的一个字符串
value String 回显图片的路径 半路径 ;分隔

getSign

suffix 图片后缀 width 图片宽度 height 图片高度 extraParam 自定义的参数

width 和 height 参数是组件通过渲染获取的图片真实宽高,
推荐传递到服务器端参与签名 生成的URL key中能携带宽高信息 如
/avatar/2018-10-10/f2b3ace0-cc33-11e8-8ad4-3550e70cc242_800_600.jpg 图片路径中携带了宽高信息 后期前端页面图片懒加载时 可以通过链接中的宽高信息做优化

  1. // oss
  2. const getSign = (suffix,width,height, extraParam) => {
  3. const apiServerUrl = 'https://hp.bncry.cn/util/getAliyunSignature';
  4. const url = `${apiServerUrl}?${[
  5. `bizName=${extraParam.bizName}`,
  6. `suffix=${suffix}`,
  7. `width=${width}`,
  8. `height=${height}`,
  9. ].join('&')}`;
  10. return new Promise((resolve,reject)=>{
  11. fetch(url).then(async (response)=>{
  12. const res = await response.json();
  13. const formData = res.data;
  14. resolve({
  15. key: formData.dirPath,
  16. policy: formData.policy,
  17. OSSAccessKeyId: formData.OSSAccessKeyId,
  18. success_action_status: '200',
  19. callback: formData.callback,
  20. signature: formData.signature,
  21. });
  22. })
  23. })
  24. };
  25. // qiniu
  26. const getSign = (suffix,width,height, extraParam) => {
  27. const qiniuApiServerUrl = 'https://hp.bncry.cn/util/getQiniuSignature';
  28. const url = `${qiniuApiServerUrl}?${[
  29. `suffix=${suffix}`,
  30. `width=${width}`,
  31. `height=${height}`,
  32. ].join('&')}`;
  33. return new Promise((resolve,reject)=>{
  34. fetch(url).then(async (response)=>{
  35. const formData = await response.json();
  36. resolve({
  37. token: formData.uptoken,
  38. });
  39. })
  40. })
  41. };

注意事项

获取签名采用的是async await的异步处理方式 需要你的项目支持async await 如果不支持 会报 ReferenceError: regeneratorRuntime is not defined

解决方案

  1. npm i --save-dev babel-plugin-transform-runtime
  2. .babelrc 文件中添加:
  3. "plugins": [[
  4. "transform-runtime",
  5. {
  6. "helpers": false,
  7. "polyfill": false,
  8. "regenerator": true,
  9. "moduleName": "babel-runtime"
  10. }
  11. ]]

分享一个react 图片上传组件 支持OSS 七牛云的更多相关文章

  1. 基于Node的React图片上传组件实现

    写在前面 红旗不倒,誓把JavaScript进行到底!今天介绍我的开源项目 Royal 里的图片上传组件的前后端实现原理(React + Node),花了一些时间,希望对你有所帮助. 前端实现 遵循R ...

  2. Jquery图片上传组件,支持多文件上传

    Jquery图片上传组件,支持多文件上传http://www.jq22.com/jquery-info230jQuery File Upload 是一个Jquery图片上传组件,支持多文件上传.取消. ...

  3. H5拍照、选择图片上传组件核心

    背景 前段时间项目重构,改成SSR的项目,但之前用的图片选择上传组件不支持SSR(server-side-render).遂进行了调研,发现很多的工具.但有的太大,有的使用麻烦,有的不满足使用需求.决 ...

  4. vue图片上传组件

    前言:很多项目中都需要用到图片上传功能,而其多处使用的要求,为了避免重复造轮子,让我决定花费一些时间去深入了解,最终封装了一个vue的图片上传组件.现将总结再次,希望有帮助. Layout <d ...

  5. 微信小程序简单封装图片上传组件

    微信小程序简单封装图片上传组件 希望自己 "day day up" -----小陶 我从哪里来 在写小程序的时候需要上传图片,个人觉得官方提供的 Uploader 组件不是太好用, ...

  6. vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

    一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload), ...

  7. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

  8. 图片上传,支持同步/异步、预览(MVC、uploadify异步提交、js预览、ajaxSubmit异步提交)兼容大部分浏览器,含代码

    图片上传代码,支持同步/异步和图片的预览 主要用了两种方式,可兼容大部分浏览器. 第一种使用uploadify异步上传,上传后返回图片路径显示到页面. 每二种使用ajaxSubmit异步上传,为兼容I ...

  9. 图片上传组件webuploader

    前端组件webuploader 当时也是搞了很久参考这种demo,但是没记.现在事后大致总结下.直接上大概代码(我使用asp.net  MVC来做的): 执行顺序:(get)Record/Add——A ...

随机推荐

  1. Element-UI tree 组件 点击后高亮显示的样式修改(背景色)

    感觉默认的高亮背景色颜色太浅,修改一下: .el-tree-node:focus > .el-tree-node__content { background-color: #ccc !impor ...

  2. LeetCode-016-最接近的三数之和

    最接近的三数之和 题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只 ...

  3. Hadoop原生对象存储Ozone

    Hadoop 社区推出了新一代分布式Key-value对象存储系统 Ozone,同时提供对象和文件访问的接口,从构架上解决了长久以来困扰HDFS的小文件问题.本文作为Ozone系列文章的第一篇,抛个砖 ...

  4. tp5怎么防sql注入 xss跨站脚本攻击

    在 application/config.php 中有个配置选项 框架默认没有设置任何过滤规则,你可以是配置文件中设置全局的过滤规则 则会调用这些函数 自动过滤 // 默认全局过滤方法 用逗号分隔多个 ...

  5. tp5 商城商品模型删除

    1:控制器代码 public function delete($id) { //验证id是否正确 $id if (!intval($id)) { return getJsonData(10010, ' ...

  6. php使用cvs导出百万条数据,大量数据

    MySQL CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL DEFAUL ...

  7. 8、msyql性能分析工具

    性能分析工具 1服务器优化的步骤 2查询系统参数 在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的性能参数.执行频率 . SHOW STATUS语句语法如下: S ...

  8. springboot 踩坑之路之 Configuration Annotation Proessor not found in classpath

    1.出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationPropert ...

  9. python练习册 每天一个小程序 第0011题

    1 # -*-coding:utf-8-*- 2 3 4 def test(content): 5 flag = 0 6 with open('filtered_words.txt') as fp: ...

  10. 有没有想过String为什么设计为不可变对象

    1.声明为final类的目的: 主要目的就是保证String是不可变(immutable).不可变就是第二次给一个String 变量赋值的时候,不是在原内存地址上修改数据,而是重新指向一个新对象,新地 ...