鍍金池/ 問(wèn)答/HTML5  HTML/ FileReader readAsDataURL讀取視頻文件 一直預(yù)覽失敗 怎么

FileReader readAsDataURL讀取視頻文件 一直預(yù)覽失敗 怎么解決?

使用FileReader readAsDataURL讀取本地上傳的視頻文件 很多時(shí)候預(yù)覽不到 如圖圖片描述

猜測(cè)是因?yàn)橐曨l大小的問(wèn)題 不知道這里到底是因?yàn)槭裁?菜鳥(niǎo)求帶
正常應(yīng)該是 圖片描述

代碼 如下
var reader = new FileReader();

            reader.onload = (evt) => {
                if (videoType.indexOf(fileType.toLocaleLowerCase()) !== -1) {
                    $('.waitUpload .nullVideo').remove();
                    $('.waitUpload').html(
                        '<div data-filename="' + fileName +
                        '">\
                    <div>\
                        <div class="videoCtn"><video src="' +
                        evt.target.result +
                        '" controls></video></div>\
                    </div>\
                    <div class="videoInfo">\
                        <span class="videoName" title="' +
                        fileName + '">' +
                        fileName + '</span>\
                        <span class="videoSize">' +
                        size +
                        'M</span>\
                    </div>\
                    <div class="btnCtn">\
                        <span class="btn" data-toggle="modal" data-target=".modal">上傳</span>\
                    </div>\
                </div>'
                    );
                    file = _this.files[0];
                    localAddress = evt.target.result;
                } else {
                    alert('請(qǐng)選擇視頻文件');
                }
                $(this).val('');
            };
            reader.readAsDataURL(this.files[0]);

回答
編輯回答
陪我終

FileReader.readAsDataURL 讀取文件之后是 base64 編碼的字符串,這個(gè)是不能直接作為 src 使用的,要直接使用還應(yīng)當(dāng)拼接響應(yīng)的 MIME Type 前綴,比如 data:audio/ogg; 這是 .ogg 格式的前綴,具體是什么前綴取決于你上傳文件的擴(kuò)展類型了。

其實(shí)這里沒(méi)必要非使用 FileReader 來(lái)完成這個(gè)需求,讀一些小的文件還可以,讀大的文件其實(shí)不是很好。不如直接使用 URL.createObjectURL() 來(lái)創(chuàng)建一個(gè) DOMString,然后直接使用這個(gè) DOMString 即可,不過(guò)不要忘記使用完之后通過(guò) URL.revokeObjectURL()方法來(lái)釋放。

我之前做過(guò)一個(gè)很簡(jiǎn)單的預(yù)覽器組件,就是通過(guò)后者完成的,基本簡(jiǎn)單的格式(音頻、視頻、圖片等等)都可以預(yù)覽,不過(guò)是基于 Angular 的,鏈接。

2018年5月3日 21:46
編輯回答
朽鹿

樓上其實(shí)已經(jīng)說(shuō)了,我再說(shuō)說(shuō)我知道的。

base64轉(zhuǎn)碼其實(shí)很費(fèi)時(shí)間,還會(huì)卡,大了之后就解不出來(lái)了,你使用三五秒的視頻,是可以解出來(lái)的。

demo地址

2017年1月24日 10:15