在js中对视频文件进行base64编码

Base64-encoding a Videofile in js

所以我有一个视频文件和它的路径(例如 /outerfolder/innerfolder/video.mp4)。我现在想在 JS 中使用 Base64 对这段视频进行编码,以便能够将其存储在数据库中。如果您能帮我解决视频文件的编码问题,我将不胜感激。 提前致谢。

您可以使用以下函数对文件进行编码以将文件转换为 ArrayBuffer:

[更新]

//<input type=file id="encondeMP4">
var encodeMP4 = document.getElementById('encondeMP4');

您现在可以在文件输入更改时添加一个事件侦听器

window.onload = function () {
    //add eventlisteners

    encodeMP4.addEventListener('change', someFunction);
}

您需要一个函数来处理来自事件监听器的调用

function someFunction(){
    encode(arrayBufferToString)
}

function encode(callback){
    var file = encodeMP4.files[0];
    var reader = new FileReader();
    reader.onload = function(e){
        var contents = e.target.result;
        var contentBuffer = arrayBufferToString(contents);
        var array = callback(contentBuffer);
    }
    reader.readAsArrayBuffer(file);
}

在 var 数组中,您现在拥有二进制编码的 MP4,在之前的函数中是一个内部变量,因此您需要根据需要调整此代码。也许是一个名为 YourEncodedMP4 = array

的全局容器
function arrayBufferToString(buffer) {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return binary;
}

您现在可以调用此函数将 MP4 编码的字符串转换为 Base64。

由您决定将 var 数组的内容存储在哪里,但请记住此调用是异步的。

现在您可以使用容器使用此功能 "YourEncodedMP4"

function stringToArrayBuffer(YourEncodedMP4) {
    var arrBuff = new ArrayBuffer(YourEncodedMP4.length);
    var writer = new Uint8Array(arrBuff);
    for(var i = 0, len = YourEncodedMP4.length; i < len; i++){
        writer[i] = YourEncodedMP4.charCodeAt(i);
    }

    return writer;
}

你现在有一个 returns 字节数组的函数,你可以使用

var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(stringToArrayBuffer(YourEncodedMP4))));

你最终会得到一个 StringBase64