Javascript

我是散列文件本身中的數據,還是只是參考?

  • June 24, 2019

我正在嘗試創建一個應用程序,將文件上傳到網站,然後將該文件的雜湊送出到乙太坊。我不確定我是在散列下面的實際文件還是只是對文件的引用。

對下面的腳本有什麼建議嗎?

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上查看和執行程式碼

引用自:https://ethereum.stackexchange.com/questions/72131