Ionic Camera file_uri конвертировать в blob для загрузки s3 - PullRequest
0 голосов
/ 23 сентября 2019

Я работаю над функционалом, где я загружаю изображение после захвата его с родной камеры.Но есть проблема при преобразовании 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': строка, которая должна быть декодирована, неправильно закодирована.

1 Ответ

0 голосов
/ 24 сентября 2019

Вы должны убедиться, что вы установили файл-кордовый плагин

См. Документацию Ionic - https://ionicframework.com/docs/native/file

...