2016-07-06 102 views
0

所以我有一個視頻文件和它的路徑(例如/outerfolder/innerfolder/video.mp4)。我現在想用JS中的Base64編碼這個視頻,這樣我就可以將它存儲在數據庫中。如果你能幫助我對視頻文件的編碼,我會非常感激。 在此先感謝。Base64-在js中編碼視頻文件

回答

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方式編碼字符串轉換爲一個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; 
} 

你現在有返回一個字節數組的功能,比你可以使用

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

你最終會與一個StringBase64

+0

當我這樣做,它只是給我在Base64中的文件名。我真正想要的是將**整個視頻**編碼爲Base64,就像我可以對照片做的一樣。 – njoye

+0

您使用輸入標籤類型=文件嗎?你能用一些代碼更新你的文章嗎? – lumee