webamp/js/fileUtils.js
2018-01-18 16:20:22 -08:00

48 lines
1.4 KiB
JavaScript

export async function genArrayBufferFromFileReference(fileReference) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function(e) {
resolve(e.target.result);
};
reader.onerror = function(e) {
reject(e);
};
reader.readAsArrayBuffer(fileReference);
});
}
export async function genArrayBufferFromUrl(url) {
return new Promise((resolve, reject) => {
const oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
oReq.onload = () => {
const arrayBuffer = oReq.response; // Note: not oReq.responseText
resolve(arrayBuffer);
};
oReq.onerror = reject;
oReq.send(null);
});
}
export async function promptForFileReferences() {
return new Promise(resolve => {
// Does this represent a memory leak somehow?
// Can this fail? Do we ever reject?
const fileInput = document.createElement("input");
fileInput.type = "file";
fileInput.multiple = true;
// Not entirely sure why this is needed, since the input
// was just created, but somehow this helps prevent change
// events from getting swallowed.
// https://stackoverflow.com/a/12102992/1263117
fileInput.value = null;
fileInput.addEventListener("change", e => {
resolve(e.target.files);
});
fileInput.click();
});
}