Javascript: 表单输入音频到音频下载link?
Javascript: Form input audio to audio download link?
这是一个奇怪的问题,但让我困惑了一段时间。
我有这个音频输入:
<input required type="file" id="inputAudio" accept="audio/*" onchange="downloadLink(this);">
当你提交一些音频时,我想在这个元素上添加一个下载link:
<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>
任何帮助都会很棒!
诀窍是你应该把它变成一个 ObjectURL
然后顾名思义你可以将它用作 url for 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
这是一个奇怪的问题,但让我困惑了一段时间。
我有这个音频输入:
<input required type="file" id="inputAudio" accept="audio/*" onchange="downloadLink(this);">
当你提交一些音频时,我想在这个元素上添加一个下载link:
<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>
任何帮助都会很棒!
诀窍是你应该把它变成一个 ObjectURL
然后顾名思义你可以将它用作 url for 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