正是你需要的:)你可以選擇回調版本或承諾版本。請注意,promise只能在Promise的polyfill lib中使用。您可以將此代碼放在頁面上一次,並且此函數將顯示在所有文件中。
時進步上的 裝載停止的資源(後如「錯誤」,「中止」或「裝載」已 派出)
回調版本loadend事件被觸發
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);
})
});
無極版
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){
// empty regexp if not set
regexp = regexp || /.*/;
//making array from FileList
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(){
//for one file
var selectedFile = this.files[0];
selectedFile.convertToBase64().
then(function(obj){
alert(obj.result);
});
});
//for all files that have file extention png, jpeg, jpg, gif
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/>
你對HTML5文件api有什麼不瞭解?你嘗試了什麼?什麼沒有奏效? – epascarello
@epascarello實際上它們並不完全支持http://caniuse.com/#feat=fileapi我需要一個解決方法,特別是導致Android版本仍舊使用(舊版本)以及舊iOS版本,並且我也會喜歡涉及IE9,這仍然用了很多:P – bombastic
一個解決方法是什麼?你想用這個文件做什麼? 'base64file()' - 是一個插件嗎? – David