React:如何读取音频文件并在上传前提供预览?

2024-03-27

我正在处理音频文件上传,并希望在上传开始之前音频文件可用于音频播放器:1) 用户选择音频文件,2) 音频文件可供收听(作为预览), 3)如果一切正常,用户按下提交。

我完成了第一步,基本上创建了一个文件输入(有效)。但是,当我将所选音频文件链接到音频播放器时,它不可用。现在我想知道我是否做错了什么,或者我对音频预览的工作原理是否有错误的想法。

export class AudioUploadView extends Component {

constructor(props) {
    super(props);
    this.onClickResetAudioFile = this.onClickResetAudioFile.bind(this)
    this.onChangeAudioFile = this.onChangeAudioFile.bind(this)
    this.inputRef = React.createRef();


  this.state = {
    selectedFile: null
  };

}

onChangeAudioFile(e){

  this.setState({selectedFile: e.target.files [0]}, () => {
    console.log (this.state.selectedFile)} );

  // pass file to props to make it available to parent component
  var data = e.target.files [0];
  this.props.AudioFileCallback(data);

  //console.log (data)
}


onClickResetAudioFile (e) {
 this.setState({selectedFile:null}); // celears state
 this.inputRef.current.value = "" // clears form

}

showResetButton(){
  if (this.state.selectedFile) {

    return (
        <button onClick={this.onClickResetAudioFile}> Clear! </button> 
    );
} else {
  return (
        <div>{null}</div>

  );
}
}

showFileData() {
  if (this.state.selectedFile) { 
          return ( 
            <div> 
              <h2>File Details:</h2> 
              <p>File Name: {this.state.selectedFile.name}</p> 
              <p>File Type: {this.state.selectedFile.type}</p> 
              <p> 
                Last Modified:{" "} 
                {this.state.selectedFile.lastModifiedDate.toDateString()} 
              </p>

                          <audio
                controls
                src={this.state.selectedFile}>
                    Your browser does not support the
                    <code>audio</code> element.
            </audio>


              {this.showResetButton()} 

            </div> 
          ); 
        } else { 
          return ( 
            <div> 
              <br /> 
              <h4>Choose before Pressing the Upload button</h4> 
            </div> 
          ); 
        } 
}



  render() {
    var file = this.state.selectedFile
    //console.log (this.state.selectedFile)
    return (
      <React.Fragment>
      <div className="card card-body mt-4 mb-4">




           <div>
          <input type="file" onChange={this.onChangeAudioFile} ref={this.inputRef} /> 
          </div> 




          {this.showFileData()} 


      </div>
      </React.Fragment>
    );
  }
}

要在上传之前收听音频文件,您需要获取 Base64 字符串形式的音频文件。

  • FileReader.readAsDataURL https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

然后您可以按照以下说明通过播放 Base64 字符串音频来收听音频。

  • 播放 wav-声音文件-在-base64-with-javascript 中编码 https://stackoverflow.com/questions/17762763/play-wav-sound-file-encoded-in-base64-with-javascript

Thanks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React:如何读取音频文件并在上传前提供预览? 的相关文章

随机推荐

  • 如何用制表符替换换行符?

    我有如下所示的图案 hi hello hallo greetings salutations no more hello for you 我正在尝试使用以下命令用制表符替换所有换行符 sed e s n t g 但它不起作用 有人可以帮忙吗
  • 在哪里可以了解有关 C++0x 的更多信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C++ 中的 readNetFromTensorflow 错误

    我是深度学习的新手 第一步 我使用 keras 在 python 中创建并训练一个模型 并通过以下代码冻结 def export model MODEL NAME input node name output node name tf tr
  • 使用 url 生成 YouTube 视频的嵌入代码

    我想将 YouTube 视频添加到我的网站 我想知道有没有办法generate 嵌入代码 by giving the url 我们在浏览器中输入 as input 简而言之 有没有办法获得 嵌入代码 作为输出 给出 url 视频作为输入 我
  • Python:将2个列表转换为字典并为每组数据重复键

    了解 Python 的 zip 函数 我可以做这个 list keys fname lname dob list data bob smith 12121950 keys and data dict zip list keys list d
  • 是否可以向我的应用程序添加“评价此应用程序”链接?

    这就是我想要做的 我的应用程序的设置页面上有一个按钮 我希望它可以将用户引导至应用程序商店上的评论 评分页面 我知道可以使用 UIApplication sharedApplication openURL 但我的应用程序尚未发布 所以我没有
  • Rails 密码将在 24 小时内过期

    在我的 Rails 3 1 应用程序中 我想为用户创建随机密码并使其过期 我正在使用 devise gem 来实现这一点 任何可用的插件expiring password在一段时间内 否则请给我一些逻辑建议来实现此功能 请把我当作一个新手
  • MySQL 连接器 C++ - 无效指针

    我正在尝试使用 MySQL C 连接器连接到数据库 我已经添加了库 并且源代码可以使用所有必要的 include 语句正确编译 我正在使用的代码如下 include
  • 逆斐波那契算法?

    对于任意 n 计算 F n 的方法有数十种 其中许多方法都具有很高的运行时间和内存使用率 然而 假设我想问相反的问题 给定 F n n gt 2 n 是多少 n gt 2 限制存在 因为 F 1 F 2 1 并且没有明确的逆 解决这个问题最
  • 将 Single> 转换为 Observable

    Goal I get a Single
  • 画家难题 - 从第一原理进行算法估计

    这个问题是基于从2001年开始 A guy 找到了一份街头油漆工的工作 在路中间画虚线 第一天他完成了 300 码 第二天完成了 150 码 第三天甚至更少 老板很生气 要求一个解释 我无能为力 那家伙说 我每天都离油漆罐越来越远 我的问题
  • 如何删除用户注册/登录表单?

    我的网站不需要用户登录功能 只有部分用户需要发布新节点 如何删除 Drupal 中的用户注册和登录表单 虽然从技术上讲可以删除登录功能 但您不应该这样做 因为那样您的管理员将永远无法登录该网站 为了删除注册功能 您只需浏览到admin us
  • 是否有适用于 Microsoft Access 的 64 位驱动程序?

    java sql SQLException Microsoft ODBC Driver Manager 指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配 当我尝试使用 jdbc 从 eclipse 项目连接到 Microsoft
  • 将 IBM Lotus Notes 文件转换为文本

    如何将 nsf Lotus 文件转换为文本文件 我想编写一个java程序来读取我系统上的 nsf文件 我已经简单地尝试过 但它显示非英语字符 他们有什么方法可以正常访问它们 EDIT 该代码位于 net中并使用任何服务器的会话 我只想通过j
  • 检查 C 中是否存在文件[重复]

    这个问题在这里已经有答案了 我正在尝试在 C 应用程序中打开文件 在尝试读取文件之前如何检查文件是否存在 尝试打开它 FILE file file fopen file name r if file file exists and can
  • Numpy - 将 x,y 坐标的二维数组转换为坐标之间距离的平面数组

    我想使用 numpy 将 x y 坐标的二维数组转换为每个坐标之间的距离的平面数组 请注意 第一对 x y 坐标应保留在输出数组中 作为稍后重建坐标的参考 此过程的目的是减小数组的大小 以提高网络共享的速度 例如 input 8081441
  • 如何将数组中的数字从低到高排序

    我正在尝试将一系列价格从低到高排序 我可以让它工作 但不是我想要的方式 长话短说 排序器将数字按如下顺序排列 100 10900 200 290 而不是像这样排序 100 200 290 10900 这是我正在执行此操作的代码 void f
  • 如何从命令行使用 PyCharm 作为 GIT diff 工具?

    On the PyCharm 帮助网站 https www jetbrains com pycharm help running pycharm as a diff or merge command line tool html我发现您可以
  • Comparator 是一个类型类吗?

    我一直在阅读 Scala 中的类型类 并认为我已经很好地掌握了它 直到我想起了 Java 的类型类java util Comparator 如果我理解正确的话Ordering是类型类的原型示例 我能想到的唯一区别Comparator和一个实
  • React:如何读取音频文件并在上传前提供预览?

    我正在处理音频文件上传 并希望在上传开始之前音频文件可用于音频播放器 1 用户选择音频文件 2 音频文件可供收听 作为预览 3 如果一切正常 用户按下提交 我完成了第一步 基本上创建了一个文件输入 有效 但是 当我将所选音频文件链接到音频播