Как открыть PDF-файл из Blob с помощью Ionic FileOpener и Capacitor - PullRequest
1 голос
/ 24 сентября 2019

В моем проекте Ionic 5 у меня есть PDF, загруженный на устройство (физический iPhone Pro, симуляторы iOS, а также устройства Android).Преобразуется в Base64 и сохраняется в виде файла .txt.Я извлекаю файл следующим образом:

const options = {
  path: path,
  directory: FilesystemDirectory.Data,
  encoding: FilesystemEncoding.UTF8
}

Filesystem.readFile(options)
  .then(result => {

    const jsonCast = JSON.parse(result.data)
    const blop: Blob = this.convertBase64ToBlob(jsonCast)
    resolve(blop)
})

Следующий шаг в моем коде - получить URL-адрес файла BLOB-объекта:

const fileURL = URL.createObjectURL(blob)

Теперь с помощью FileOpener Ionic native,когда я пытаюсь открыть файл с помощью:

this.fileOpener.open(blobURL, 'application/pdf')

, я получаю сообщение об ошибке, что File does not exist.

⚡️  [log] - fileURL:  blob:capacitor://localhost/ff4efd06-a313-44ce-b386-c756d456e72f   
2019-09-23 17:06:19.267144-0700 App[25791:19944973] Path parameter not encoded. Building file URL encoding it...
2019-09-23 17:06:19.267326-0700 App[25791:19944973] looking for file at blob:capacitor:/localhost/ff4efd06-a313-44ce-b386-c756d456e72f -- file:///
⚡️  [log] - Error opening file {"status":"9","message":"File does not exist"}  

Чего мне не хватает или как лучше подходить ксохранить файл PDF на жесткий телефон и получить, затем загрузить и отобразить его?Я пытался отправить его в браузер Safari, но плагин ожидает URL-адрес https и тоже ловит.

Любая помощь очень ценится.

PS: Как уже упоминалось в моем вопросе,Я создаю приложение с конденсатором.Поэтому я ограничен тем, какие плагины Cordova я могу использовать.Спасибо, что учли это в своей помощи.

1 Ответ

1 голос
/ 26 сентября 2019

URL-адрес большого двоичного объекта - это URL-адрес, который понимает только WebView приложения. Вы не можете использовать этот URL-адрес, чтобы открыть его в другом приложении.

Вместо того, чтобы получать данные файла и создавать их URL-адрес большого двоичного объекта, простоиспользуйте функцию getUri для получения пути к файловой системе.

Filesystem.getUri({
  directory: FilesystemDirectory.Data,
  path: path
}).then((getUriResult) => {
  const path = getUriResult.uri;
  this.fileOpener.open(path, 'application/pdf')
}, (error) => {
  console.log(error);
});

PS Поскольку вы читаете с encoding: FilesystemEncoding.UTF8, я полагаю, вы также использовали его для записи, я не думаю, что это сработаетВы не должны записывать их как данные base64 без кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...