app_mapbuilder/libs/file.js
2022-04-22 18:34:31 +05:00

92 lines
2.0 KiB
JavaScript

export default {
/**
* Downloads file
* @param {*} filename
* @param {*} data
*/
download(filename, data) {
var element = document.createElement("a");
element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(data));
element.setAttribute("download", filename);
element.style.display = "none";
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
},
/**
* Convert data of file selected in input to base64 string
* @param {*} input
*/
async toBase64(input) {
return new Promise((resolve) => {
if (input.files.length == 0){
resolve(null)
}
else if (input.files.length == 1){
this.fileToBase64(input.files[0]).then(resolve)
}
else
Promise.all(Array(...input.files).map(this.fileToBase64)).then(resolve)
}
);
},
/**
* Convert data of file selected in input to base64 string
* @param {*} input
*/
async fileToBase64(file) {
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
resolve(reader.result)
};
reader.onerror = function (error) {
reject(error)
};
});
},
/**
* Read data of file/files selected in input as string
* @param {*} input
*/
async read(input) {
return new Promise((resolve) => {
if (input.files.length == 0){
resolve(null)
}
else if (input.files.length == 1){
this.readFile(input.files[0]).then(resolve)
}
else
Promise.all(Array(...input.files).map(this.readFile)).then(resolve)
}
);
},
/**
* Read data of file/files selected in input as string
* @param {*} input
*/
async readFile(file) {
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function () {
resolve(reader.result)
};
reader.onerror = function (error) {
reject(error)
};
});
},
};