Chính xác những gì bạn cần :) Bạn có thể chọn phiên bản gọi lại hoặc phiên bản Promise. Lưu ý rằng Promise sẽ chỉ hoạt động trong IE với Promise polyfill lib. Bạn có thể đặt mã này một lần trên một trang và chức năng này sẽ xuất hiện trong tất cả các tệp của bạn.
Sự kiện loadend được kích hoạt khi tiến trình đã dừng khi tải tài nguyên (ví dụ: sau khi "lỗi", "hủy bỏ" hoặc "tải" đã được gửi đi)
Phiên bản gọi lại
File.prototype.convertToBase64 = function(callback){
var reader = new FileReader();
reader.onloadend = function (e) {
callback(e.target.result, e.target.error);
};
reader.readAsDataURL(this);
};
$("#asd").on('change',function(){
var selectedFile = this.files[0];
selectedFile.convertToBase64(function(base64){
alert(base64);
})
});
Phiên bản hứa hẹn
File.prototype.convertToBase64 = function(){
return new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onloadend = function (e) {
resolve({
fileName: this.name,
result: e.target.result,
error: e.target.error
});
};
reader.readAsDataURL(this);
}.bind(this));
};
FileList.prototype.convertAllToBase64 = function(regexp){
regexp = regexp || /.*/;
var filesArray = Array.prototype.slice.call(this);
var base64PromisesArray = filesArray.
filter(function(file){
return (regexp).test(file.name)
}).map(function(file){
return file.convertToBase64();
});
return Promise.all(base64PromisesArray);
};
$("#asd").on('change',function(){
var selectedFile = this.files[0];
selectedFile.convertToBase64().
then(function(obj){
alert(obj.result);
});
});
this.files.convertAllToBase64(/\.(png|jpeg|jpg|gif)$/i).then(function(objArray){
objArray.forEach(function(obj, i){
console.log("result[" + obj.fileName + "][" + i + "] = " + obj.result);
});
});
})
html
<input type="file" id="asd" multiple/>