Javascript
我是散列文件本身中的數據,還是只是參考?
我正在嘗試創建一個應用程序,將文件上傳到網站,然後將該文件的雜湊送出到乙太坊。我不確定我是在散列下面的實際文件還是只是對文件的引用。
對下面的腳本有什麼建議嗎?
const input = document.querySelector('input'); input.addEventListener('input', e => { e.preventDefault(); const hash = web3.sha3(e.target.value); });
任何幫助將不勝感激。
如果我理解正確,您希望使用標準 HTML 標記將文件從客戶端電腦上傳到 Web 應用程序
<input type="file">
,然後對文件內容進行雜湊處理。您的程式碼實際上是散列文件的完整路徑。
如果你想讀取文件的內容,我推薦這樣使用
FileReader
:HTML:
<div> <label for="input-file">Specify a file:</label><br> <input type="file" id="input-file"> </div> <div> Content: <textarea id="content-target"></textarea> </div> <div> Content Hash: <textarea id="hash-target"></textarea> </div>
JavaScript:
document.getElementById('input-file').addEventListener('change', event => { const input = event.target if ('files' in input && input.files.length > 0) { read(input.files[0]).then(content => { document.getElementById('content-target').value = content; document.getElementById('hash-target').value = web3.sha3(content, { encoding: 'hex' }); // << Specify you are hashing Base16 (hexadecimal) }); } }) function read(file) { const reader = new FileReader(); return new Promise((resolve, reject) => { reader.onload = event => { // Convert Array Buffer to Base16 var u = new Uint8Array(event.target.result), a = new Array(u.length), i = u.length; while (i--) // map to hex a[i] = (u[i] < 16 ? '0' : '') + u[i].toString(16); u = null; // free memory resolve(a.join("")); } reader.onerror = error => reject(error) reader.readAsArrayBuffer(file) }); }
您還可以在JSFiddle上查看和執行程式碼