Я работаю над функционалом, где я загружаю изображение после захвата его с родной камеры.Но есть проблема при преобразовании file_uri в blob.Он не переходит к readAsArrayBuffer.Любые другие решения для преобразования file_uri в blob?
fileUriToBlob(imageData) {
return new Promise((resolve, reject) => {
let fileName = "";
this.file
.resolveLocalFilesystemUrl(imageData)
.then(fileEntry => {
let { name, nativeURL } = fileEntry;
// get the path..
let path = nativeURL.substring(0, nativeURL.lastIndexOf("/"));
console.log("path", path);
console.log("fileName", name);
fileName = name;
// we are provided the name, so now read the file into a buffer
return this.file.readAsArrayBuffer(path, name);
})
.then(buffer => {
// get the buffer and make a blob to be saved
let imgBlob = new Blob([buffer], {
type: "image/jpeg"
});
console.log(imgBlob.type, imgBlob.size);
// pass back blob and the name of the file for saving
// into fire base
resolve({
fileName,
imgBlob
});
})
.catch(e => reject(e));
});
}
source: https://github.com/aaronksaunders/ionic4-firebase-storage
EDIT:
Пробовал это
imageToBlob(b64Data: string, contentType: string, sliceSize: number = 512) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
let byteCharacters = atob(b64Data.replace(/^data:image\/(png|jpeg|jpg);base64,/, ''));
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
this.blobImage = new Blob(byteArrays, { type: contentType });
return this.blobImage;
}
Но ястолкнулся с этой ошибкой: DOMException: не удалось выполнить 'atob' в 'Window': строка, которая должна быть декодирована, неправильно закодирована.