Yo utilice la siguiente función para convertir los archivos o imágenes a base 64
function SelectedFile() {
//Toma el archivo elegido por el input
var value = document.getElementById("file").files[0];
//Este objeto FileReader te permite leer archivos
var reader = new FileReader();
//Esta función se ejecuta cuando el reader.readAsDataURL termina
reader.onloadend = function (e) {
NombreDeTuVariableAEnviar = e.target.result.split("base64,")[1];
}
//Aqui comienza a leer el archivo para posteriormente ejecutar la función onloadend
reader.readAsDataURL(value);
}
Aquí puedes consultar la documentación sobre como utilizar FileReader ,el guardado en base de datos te lo debo, espero te sea de ayuda, Saludos.
Answer from LordOfLies on Stack OverflowModern ES6 way (async/await)
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
});
async function Main() {
const file = document.querySelector('#myfile').files[0];
console.log(await toBase64(file));
}
Main();
UPD:
If you want to catch errors
async function Main() {
const file = document.querySelector('#myfile').files[0];
try {
const result = await toBase64(file);
return result
} catch(error) {
console.error(error);
return;
}
//...
}
Try the solution using the FileReader class:
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
console.log(reader.result);
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file); // prints the base64 string
Notice that .files[0] is a File type, which is a sublcass of Blob. Thus it can be used with FileReader.
See the complete working example.
Puedes utilizar un canvas, dibujarlo a traves de la imagen que quieras y obtener el codigo base64 que deseas
function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL();
return dataURL;
}
var base64 = getBase64Image(document.getElementById("img"));
console.log(base64);
<img id="img" src="http://static.13.cl/7/sites/all/themes/portal/resources/images/logo_13cl-2x.png">
Nota : Este codigo no funcionara en el snippet por temas de seguridad hacia la imagen.
Usando FileReader
- Creamos un nuevo FileReader
fileReader. - Se le añade un evento de tipo
loadafileReaderque sera ejecutado una vez este cargada la imagen, del cual podremos extraer la imagen en base64, accediendo a la propiedadfileReader.result. Se usa un callback porque
FileReaderes asíncrono, por tanto hay que pasarle una función, que sera llamada una vez termine de cargar la imagen.Finalmente le decimos a
fileReaderque lea la imagen como una url de datos, a través del métodoreadAsDataURL(img),filedeber ser un objeto de tipo File.
/*
* @param { img }: File
* @param { callback }: function
*/
function getBase64FomFile(img, callback){
let fileReader = new FileReader();
fileReader.addEventListener('load' function(evt){
callback(fileReader.result);
});
fileReader.readAsDataURL(img);
}
/* Seria usada de la siguiente manera */
getBase64FromFile(file, function(base64){
console.log(base64)
});
Nota : El snippet no funcionara