所以我有一个视频文件及其路径(例如/outerfolder/innerfolder/video.mp4
)。我现在想用JS中的Base64编码这个视频,这样我就可以将它存储在数据库中。如果你可以帮我看一下视频文件的编码,我会非常感激。
提前谢谢。
答案 0 :(得分:1)
您可以使用以下函数对文件进行编码,以将文件转换为ArrayBuffer:
<强> [更新] 强>
//<input type=file id="encondeMP4">
var encodeMP4 = document.getElementById('encondeMP4');
现在,您可以在文件输入更改时添加事件侦听器
window.onload = function () {
//add eventlisteners
encodeMP4.addEventListener('change', someFunction);
}
你需要一个函数来处理来自eventlistener的调用
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 enconded String转换为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;
}
现在你有一个返回Byte数组的函数,而不是你可以使用
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(stringToArrayBuffer(YourEncodedMP4))));
你最终会得到一个StringBase64