Загрузить файл из приложения Cordova InAppBrowser Vue - PullRequest
0 голосов
/ 04 марта 2020

Итак, у меня в сети работает сервер приложений Spring Boot + Vue. js. У меня также есть приложение Cordova InAppBrowser Andorid, которое показывает интерфейс.

Я должен иметь возможность использовать приложение как из реального браузера, работающего на компьютере, так и из приложения Cordova. Пока это хорошо работает.

Но: когда я хочу загрузить отформатированный текстовый файл json или любой другой файл с сервера внутри приложения Cordova, он не работает. Я прочитал много статей и других вопросов по этой теме c, но большинство из них были просто устаревшими.

Так есть ли способ достичь этого? В настоящее время мой код, который работает из браузера (мы используем Chrome), выглядит примерно так:

api({
  url: url,
  method: 'GET',
  responseType: 'blob',
}).then((response) => {

  const blob = new Blob([response.data], {type: response.data.type})
  const url = window.URL.createObjectURL(blob)
  let fileName = extractFilename(response)

  const link = document.createElement('a')
  link.href = url
  link.setAttribute('download', fileName)
  document.body.appendChild(link)
  link.click()
  link.remove()
  window.URL.revokeObjectURL(url)
})

1 Ответ

0 голосов
/ 04 марта 2020

Причина в том, что для загрузки файла требуется доступ к файловой системе, который в мобильном приложении строже, чем на рабочем столе. Так что простой атрибут загрузки не работает.

Вам необходимо установить cordova-plugin-file: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/

Вы можете следовать этому уроку. Ниже приведен пример кода, если он помогает:

saveBlobToSystem(filename, blob) {

      // define the folder you want to save first, for example this is download folder in Android

      let folderpath = "file:///storage/emulated/0/download/";

      let vm = this;
      const onError = function(msg) {
        console.log("Error saving File to System");
      };

      window.resolveLocalFileSystemURL(folderpath, function(dir) {
        console.log("Access to the directory granted succesfully");
        dir.getFile(filename, { create: true }, function(file) {
          console.log("File created succesfully.");
          file.createWriter(function(fileWriter) {
            console.log("Writing content to file");
            fileWriter.write(blob);
            console.log("Successfully write file to system");
          }, onError);
        }, onError);
      }, onError);
    }

Однако, эти плагины Cordova могут не работать в веб-версии, поэтому я думаю, что вам все еще нужно сохранить старый код. Вы можете написать простую функцию js для определения платформы пользователя (веб-приложение или приложение android) и запустить соответствующую функцию.

...