Ho bisogno di aiuto per capire come si accede al file in JavaScript per fare alcune operazioni su di esso.Come faccio a scorrere un file, byte per byte, in JavaScript?
Vorrei scorrere un file byte per byte utilizzando JavaScript. Posso già selezionare il file che vorrei leggere. E posso leggere il byte preimpostato del file.
ho trovato questo bell'esempio su come leggere una fetta di un file qui:
Ecco il frammento di codice che sto giocando con:
<style>
#byte_content {
margin: 5px 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
}
#byte_range { margin-top: 5px; }
</style>
<input type="file" id="files" name="file" /> Read bytes:
<span class="readBytesButtons">
<button data-startbyte="0" data-endbyte="4">1-5</button>
<button data-startbyte="5" data-endbyte="14">6-15</button>
<button data-startbyte="6" data-endbyte="7">7-8</button>
<button>entire file</button>
</span>
<div id="byte_range"></div>
<div id="byte_content"></div>
<script>
function readBlob(opt_startByte, opt_stopByte) {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = parseInt(opt_startByte) || 0;
var stop = parseInt(opt_stopByte) || file.size - 1;
var reader = new FileReader();
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
document.getElementById('byte_content').textContent = evt.target.result;
document.getElementById('byte_range').textContent =
['Read bytes: ', start + 1, ' - ', stop + 1,
' of ', file.size, ' byte file'].join('');
}
};
var blob = file.slice(start, stop + 1);
reader.readAsBinaryString(blob);
}
document.querySelector('.readBytesButtons').addEventListener('click', function(evt) {
if (evt.target.tagName.toLowerCase() == 'button') {
var startByte = evt.target.getAttribute('data-startbyte');
var endByte = evt.target.getAttribute('data-endbyte');
readBlob(startByte, endByte);
}
}, false);
</script>
Ora vorrei scorrere il file, quattro byte alla volta, ma non riesco a capire come farlo. Il lettore non sembra permettermi di leggere più di una volta.
Una volta che posso leggere dal file più di una volta, dovrei essere in grado di scorrere attraverso di essa abbastanza facilmente con qualcosa di simile:
while(placemark != fileSize-4){
output = file.slice(placemark, placemark + 4);
console.log(output);
placemark = placemark + 5;
}
Grazie in anticipo! Ecco un link ad un jsFiddle e plnkr versione
Se è possibile, proverei a rifattorizzare il codice di manipolazione DOM dal codice di lettura del file. In questo modo, se hai una chiara separazione delle preoccupazioni, sarà più facile eseguire il debug e apportare modifiche. –
Sono d'accordo! Sento che una volta fatto, il resto dovrebbe essere facile ... Ma non so come? – FredFury
metterlo in un plnkr, quindi dare un'occhiata a refactoring, quindi risolverlo –