在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
所以我有一个视频文件和它的路径(例如 /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