从Blob网址下载数据

时间:2019-05-02 02:37:42

标签: javascript apache

我正在创建一个应用程序,该应用程序记录来自麦克风的音频并提供将其下载到本地驱动器的选项。这是我的一段代码,它生成带有时间戳的音频链接。

stopRecording(function(AudioBLOB){

                var url = URL.createObjectURL(AudioBLOB);
                var li = document.createElement('li');
                var au = document.createElement('audio');
                var hf = document.createElement('a');

                au.controls = true;
                au.src = url;
                hf.href = url;
                // Important:
                // Change the format of the file according to the mimetype

                hf.download = new Date().toISOString() + '.wav';
                hf.innerHTML = hf.download;
                li.appendChild(au);
                li.appendChild(hf);
                recordingslist.appendChild(li);
}, _AudioFormat);
            }, false);

我该如何修改此代码,而不是创建链接,而是直接将文件上传到我的根文件夹。

1 个答案:

答案 0 :(得分:0)

这会发送wav上游POST / upload(编码为base64)以及元数据。服务器将必须解码data并将其保存到文件系统:

class Audio {
    static createPayload(audioBlob) {
        return new Promise(function (resolve, reject) {
            const r = new FileReader();
            r.readAsDataURL(audioBlob);
            r.onloadend = function () {
                resolve(JSON.stringify({
                    filename: `${new Date().toISOString()}.wav`,
                    mimeType: 'audio/wav',
                    transferEncoding: 'base64',
                    data: r.result
                }));
            };
        });
    }
}

stopRecording(async function (audioBlob) {
    const payload = await Audio.createPayload(audioBlob);

    const xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload');
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(payload);
}, false);