0
所以我有一個視頻文件和它的路徑(例如/outerfolder/innerfolder/video.mp4
)。我現在想用JS中的Base64編碼這個視頻,這樣我就可以將它存儲在數據庫中。如果你能幫助我對視頻文件的編碼,我會非常感激。 在此先感謝。Base64-在js中編碼視頻文件
所以我有一個視頻文件和它的路徑(例如/outerfolder/innerfolder/video.mp4
)。我現在想用JS中的Base64編碼這個視頻,這樣我就可以將它存儲在數據庫中。如果你能幫助我對視頻文件的編碼,我會非常感激。 在此先感謝。Base64-在js中編碼視頻文件
你可以編碼具有以下功能的文件到您的文件轉換爲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
當我這樣做,它只是給我在Base64中的文件名。我真正想要的是將**整個視頻**編碼爲Base64,就像我可以對照片做的一樣。 – njoye
您使用輸入標籤類型=文件嗎?你能用一些代碼更新你的文章嗎? – lumee