index.js (1337B)
1 import {arrayBufferToString} from '~/lib/binary-strings'; 2 3 const selectFiles = (() => { 4 let fileInput; 5 return function selectFiles(multiple = false) { 6 if (fileInput) { 7 document.body.removeChild(fileInput); 8 } 9 fileInput = document.createElement('input'); 10 document.body.appendChild(fileInput); 11 fileInput.type = 'file'; 12 fileInput.multiple = Boolean(multiple); 13 fileInput.style.display = 'none'; 14 15 const result = new Promise(function(resolve) { 16 fileInput.addEventListener('change', function() { 17 resolve(fileInput.files); 18 } 19 ); 20 } 21 ); 22 fileInput.click(); 23 return result; 24 }; 25 })(); 26 27 function readFile(file) { 28 return new Promise(function(resolve) { 29 var reader = new FileReader(); 30 reader.onload = function(e) { 31 resolve({ 32 data: arrayBufferToString(e.target.result), 33 filename: file.name 34 } 35 ); 36 }; 37 reader.readAsArrayBuffer(file); 38 } 39 ); 40 } 41 42 function readFiles(files) { 43 files = Array.prototype.slice.apply(files); 44 return Promise.all(files.map(readFile)); 45 } 46 47 export {selectFiles, readFiles};