Javascript:表单输入音频到音频下载链接?

Posted

技术标签:

【中文标题】Javascript:表单输入音频到音频下载链接?【英文标题】:Javascript: Form input audio to audio download link? 【发布时间】:2018-03-11 07:32:11 【问题描述】:

这是一个奇怪的问题,但它让我困惑了一段时间。

我有这个音频输入:

<input required type="file" id="inputAudio" accept="audio/*" onchange="downloadLink(this);">

当你提交一些音频时,我想在这个元素上添加一个下载链接:

<a id="blah">Download Audio</a>

我试过做一些奇怪的事情,比如:

function downloadLink(element) 
    var file = element.files[0];
    var reader = new FileReader();
    reader.onload = function(e) 
        var data = file.type + ";charset=utf-8," + encodeURIComponent(e.target.result);
        var link = document.getElementById("blah");
        link.href = "data:" + data;
        link.download = "someName." + file.name.split(".").pop();
    ;
    reader.readAsDataURL(file);

但是,上述情况会导致 Chrome 中的下载错误。

这是一个用于测试目的的 html 文件:

<!DOCTYPE html>
<html>
    <head>
        <title>Weird Problem</title>
        <script>
        function downloadLink(element) 
            var file = element.files[0];
            var reader = new FileReader();
            reader.onload = function(e) 
                var data = file.type + ";charset=utf-8," + encodeURIComponent(e.target.result);
                var link = document.getElementById("blah");
                link.href = "data:" + data;
                link.download = "someName." + file.name.split(".").pop();
            ;
            reader.readAsDataURL(file);
        
        </script>
    </head>
    <body>
        <input required type="file" id="inputAudio" accept="audio/*" onchange="downloadLink(this);">
        <a id="blah">Download Audio</a>
    </body>
</html>

编辑:我刚刚注意到您可以嵌入 HTML 文件:

function downloadLink(element) 
	var file = element.files[0];
	var reader = new FileReader();
	reader.onload = function(e) 
		var data = file.type + ";charset=utf-8," + encodeURIComponent(e.target.result);
		var link = document.getElementById("blah");
		link.href = "data:" + data;
		link.download = "someName." + file.name.split(".").pop();
	;
	reader.readAsDataURL(file);
<!DOCTYPE html>
<html>
	<head>
		<title>Weird Problem</title>
	</head>
	<body>
		<input required type="file" id="inputAudio" accept="audio/*" onchange="downloadLink(this);">
		<a id="blah">Download Audio</a>
	</body>
</html>

任何帮助都会很棒!

【问题讨论】:

你不需要再编码了,阅读器已经给你base64的数据了 还有github.com/eligrey/FileSaver.js @nullqube 即使不使用 encodeURIComponent 也会出现同样的错误,下载失败。我真的不想为此使用任何外部库。 【参考方案1】:

诀窍是你应该把它变成一个 ObjectURL 然后顾名思义你可以将它用作href 的网址, 所以现在已经在 safari、Chrome、FireFox 上进行了测试:

var file = element.files[0];
var link = document.getElementById("blah");
link.href = window.URL.createObjectURL(file);
link.download = "someName." + file.name.split(".").pop();

它在PlayCode.io工作

【讨论】:

此版本适用于 MP3 文件,但似乎不适用于 WAV 文件 我只是用来自music.helsinki.fi/tmt/opetus/uusmedia/esim/index-e.html 的.wav 文件对其进行了测试,效果很好。 您使用的是什么浏览器?我使用的是 Chrome,每次都出现下载错误 Safari。是的,你是对的它在 chrome 上失败了。所以让我检查一下

以上是关于Javascript:表单输入音频到音频下载链接?的主要内容,如果未能解决你的问题,请参考以下文章

音频文件到文本的转换[关闭]

naudio 音频流到 html / 网页

如何从 javascript 上的 getUserMedia() 获取超过 3 声道的音频输入

mac应用推荐——loopback

如何在点击时在 jPlayer 中播放链接到的音频文件?

如何从 Python 中的视频链接下载音频