【问题标题】:verify duration of audio file before uploading上传前验证音频文件的持续时间
【发布时间】:2018-08-19 14:06:37
【问题描述】:

是否可以在上传之前检查音频文件的持续时间,类似于下面示例中的 file.size 方式?

handleSubmit = async event =>
event.preventDefault();

if (this.file && this.file.size > config.MAX_ATTACHMENT_SIZE) {
  alert("Please pick a file smaller than" + config.MAX_ATTACHMENT_SIZE);
    return;
}

【问题讨论】:

标签: javascript


【解决方案1】:

如果我们谈论的是浏览器,是的。您可以在您的file 上使用URL.createObjectURL(),将其用作您创建的<audio> 元素的src,等待该元素的canplaythrough 事件,然后读取duration 属性。

事实上,该代码可在我最近的回答here 中找到(并在下面转载);它应该很容易集成到您的代码中。

function computeLength(file) {
  return new Promise((resolve) => {
    var objectURL = URL.createObjectURL(file);
    var mySound = new Audio([objectURL]);
    mySound.addEventListener(
      "canplaythrough",
      () => {
        URL.revokeObjectURL(objectURL);
        resolve({
          file,
          duration: mySound.duration
        });
      },
      false,
    );
  });  
}

【讨论】:

  • 谢谢你,你如何清理(removeEventListener)偶数监听器?
  • 这里不重要,因为mySound 本身应该只保留到resolve 被调用。您是否看到内存泄漏?
  • 并非如此,我一直认为不移除事件侦听器会导致内存泄漏。
猜你喜欢
  • 2016-04-23
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 2017-09-26
  • 2015-10-13
  • 1970-01-01
相关资源
最近更新 更多