ndn-js-contrib
Version:
Reusable 'Classes' for Named Data Networking: NameTree, PIT, FIB, ContentStore, Interfaces, and Transports
56 lines (43 loc) • 1.37 kB
JavaScript
function getFileChunks_Iterator(file){
this.curr = 0
this.file = file;
return this;
};
getFileChunks_Iterator.prototype.next = function(){
var file = this.file
var done = (this.curr * 8000 > file.size);
var segment = this.curr;
this.curr++;
var next = (!done) ? new Promise(function getFileChunks_Iterator_Promise(resolve,reject){
var chunk;
if ((segment+1) * 8000 > file.size)
chunk = new Buffer(file.size % 8000);
else
chunk = new Buffer(8000);
var reader = new FileReader();
var chunkNumber = segment;
reader.onloadend = function(e){
resolve({
buffer: new Buffer(new Uint8Array(e.target.result))
, chunkNumber: segment
});
};
reader.readAsArrayBuffer(file.slice(segment * 8000, (segment + 1)*8000));
})
: null;
return {
value : next
,done : done
};
}
function browser_getFileChunks(file) {
return new Promise(function getFileChunks_Promise(resolve,reject){
var chunks = {};
chunks.total = Math.ceil(file.size / 8000);
chunks[Symbol.iterator] = function(){
return new getFileChunks_Iterator(file)
}
resolve(chunks);
});
}
module.exports = browser_getFileChunks;