在后台管理项目中,用户要求上传音频,并且自动获取音频时长。

第一步, import { Upload, Button, Icon } from 'antd';

第二步,在表单中使用 Upload 组件,上传音频:

<FormItem {...formItemLayout} label="英文音频信息">
  <Row gutter={8}>
    <Col span={12}>
      <Input type="text" placeholder="景点的英文音频信息" value={site.enAudio} disabled />
    </Col>
    <Col span={12}>
      <Upload
  action="/hserve/v2/file/upload/"    // 必选参数,上传的地址
  listType="picture"             // 上传列表的内建样式(text、picture、picture-card)
  showUploadList={false}                 // 是否显示 uploadList
  accept="audio/*"             // 接受上传的文件类型
  fileList={enAudioFileList}       // 已经上传的文件列表
  onChange={this.handleAudioChange}    // 上传文件改变时的状态
     >
     <Button>
    <Icon type="upload" /> 浏览
    </Button>
      </Upload>
    </Col>
  </Row>
</FormItem>
 
handleAudioChange = (type, { file, fileList }) => {
  if (file.status === 'done') {
    fileList[fileList.length - 1].url = file.response.path
    let lastFile = fileList[fileList.length - 1]
    this.setState({
      enAudioFileList: fileList,
      site: { ...this.state.site, enAudio: lastFile.url }
    })
  return
  }
  this.setState({ enAudioFileList: fileList })
}
 
第三步,使用 react-audio-player:
  import ReactAudioPlayer from 'react-audio-player'
   
  {
    site.cnAudio      //判断是否已有音频 url
    ? (
      <ReactAudioPlayer
        ref={(element) => { duration.cnDuration = element; }}
        src={site.cnAudio}
        onCanPlay={this.onCanPlay}
      />
    )
    : null
  }
 
  

  onCanPlay = () => {
    let duration = this.state.duration
    // duration.enDuration.audioEl.duration 返回的是一个带小数的数字,因此用 Math.round 做了下处
    let enDuration = duration.enDuration ? Math.round(duration.enDuration.audioEl.duration) : null
        enDuration = enDuration ? this.setDuration(enDuration) : null
    this.setState({
      site: {...this.state.site, enDuration: enDuration}
    })
  }
  
  // 将 duration 设为 00:00 的格式
  setDuration = (sec) => {
    let min = 0
 
    sec = sec <=10 ? '0' + sec : sec
    if (sec >= 60) {
      min = (sec / 60).toFixed()
      sec = sec % 60 >= 10 ? sec % 60 : '0' + sec % 60
    }
    min = min >= 10 ? min : '0' + min
    let time = min + ':' + sec
    return time
  }
 
音频时长为 this.state.site.enDuration。

 

 
 
 
 
 

ant design + react,自动获取上传音频的时长(react-audio-player)的更多相关文章

  1. js 获取上传视频的时长、大小、后缀名

    参考资料:获取时长 var fileName = $("#sectionfileUpload").val(); //C:\fakepath\3.jpeg var exts = fi ...

  2. 以springMVC为例获取上传视频文件时长

    毕设项目是一个在线学习系统,教师用户有上传视频的功能,在答辩之前赶了一个demo出来,好多功能都写死了,比如课程学习进度就是被我写死在前端的一个变量,最近导师要我把项目打包发给他,这才心慌慌赶紧把这些 ...

  3. Python3.6_x86通过FFpmeg获取视频或音频的时长和分辨率

    前言 前段时间公司在做流媒体服务,与许多厂家合作拿了许多视频过来,现在要对这些视频文件进行整理,通过特殊的编码排列,获取他们的时长以及分辨率,这里我遇到一个大坑,请往下面看. # -*- coding ...

  4. Shell32.ShellClass服务器操作系统无法获取 音频文件时长问题

    前言: 上传音频文件,自动写入此音频文件的时长,这里用 COM组件Microsoft Shell Controls And Automation来实现. 首先 1.引用:Microsoft Shell ...

  5. iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

    用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 ...

  6. Jmeter工具之上传图片,上传音频文件接口

    https://www.jianshu.com/p/f23f7fe20bf3 互联网时代的来临,不同手机上安装的APP,还是PC端的应用软件或多或多都会涉及到图片的上传,那么在Jmeter工具如何模拟 ...

  7. PHP使用APC获取上传文件进度

    今天发现使用PHP的APC也能获取上传文件的进度.这篇文章就说下如何做. 安装APC 首先安装APC的方法和其他PHP模块的方法没什么两样,网上能找出好多 phpinfo可以看到APC的默认配置有: ...

  8. php使用ffmpeg获取上传的视频的时长,码率等信息

    视频上传是程序员在很多时候需要用到的操作,然而上传完视频肯定要获得一些视频的详细信息,php本身是不支持信息获取的 ,所以采用ffmpeg第三方插件 首先你需要下载ffmpeg文件:官网地址:http ...

  9. ie下获取上传文件全路径

    ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 /*获取上传文件路径*/ function getFilePath(obj) { var form = $(this).paren ...

随机推荐

  1. 利用iframe实现无刷新提交

    服务器里边:

  2. hdu多校第3场C. Dynamic Graph Matching

    Problem C. Dynamic Graph Matching Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Tot ...

  3. kali-rolling安装使用sonarqube教程(docker方式)

    一.说明 最近要找一款代码审计工具,Fortify SCA太贵,VisualCodeGrepper不太好用.在freebuf上看到可用sonarqube来建代码自动化扫描系统所以也来试一试. 直接安装 ...

  4. 不安全的HTTP方法(渗透实验)

    1.使用 curl -v -X OPTIONS url(含目录) 获取允许访问的http method 例如:curl -v -X OPTIONS http://192.168.1.123:12123 ...

  5. <转载> 从算法上解读自动驾驶是如何实现的?

     科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...

  6. Android开发 ---实现ListView的A-Z字母排序和过滤搜索功能

    效果图: 1.activity.xml 描述: 线性布局中一个层叠布局 <?xml version="1.0" encoding="utf-8"?> ...

  7. Java基础-方法

    方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 注意: 在一些其它语言中方法指过程和函数.一个 ...

  8. nginx——Nginx 处理事件模型

    Nginx 的连接处理机制在不同的操作系统会采用不同的 I/O 模型,要根据不同的系统选择不同的事件处理模型,可供选择的事件处理模型有:kqueue .rtsig .epoll ./dev/poll ...

  9. 利用ASK/OOK 发射模块,实现信号重放

    本文以打开无线控制的电动车库卷帘门为目标,深入研究了ASK/OOK的编/解码,并用树莓派+五元钱的ASK/OOK 发射模块 背景 车库装了电动卷帘门,为了了解其安全性,也是为了能自主控制,研究了下其遥 ...

  10. keil安装

    安装准备: 一个keil安装程序,一个注册机 安装步骤.... 软件安装: 打开C51V901.EXE 安装程序 点击Next, 同意上述证书协议 重复点击Next,知道出现finish停下. 3个多 ...