Сохраните этот PDF-файл в кеше / локальном хранилище на ionic

Хо всем. Я следовал этому руководству, чтобы создать модальное представление с PDF-файлом, созданным с помощью pdfmake.

http://gonehybrid.com/how-to-create-and-display-a-pdf-file-in-your-ionic-app/

Мой простой вопрос: как я могу сохранить PDF-файл в моем локальном хранилище в кеше? Мне это нужно, чтобы отправить PDF-файл по электронной почте или открыть его с помощью openfile2. Я использую ионный и кордовский.


person Steph8    schedule 21.03.2016    source источник
comment
вы можете использовать либо плагин для передачи файлов, либо собственный код для сохранения файла в локальном хранилище устройства. Проверьте образец кода в разделе создания файла в следующем сообщении - stackoverflow.com/questions/36037359/   -  person Gandhi    schedule 21.03.2016
comment
Спасибо за ответ. Я установил этот плагин, но в этом примере я не знал, что мне нужно использовать для хранения файла. Код base64? Капля? Я новичок и не понимаю этого.   -  person Steph8    schedule 21.03.2016
comment
пожалуйста, найдите образец кода в моем разделе ответов. Надеюсь, поможет.   -  person Gandhi    schedule 21.03.2016


Ответы (2)


Я не знаю, как вы это кодируете, но я знаю, какой плагин вам следует использовать:

https://github.com/apache/cordova-plugin-file

Git содержит полную документацию по плагину, так что все, что вам может понадобиться, должно быть там.

person Jur Clerkx    schedule 21.03.2016
comment
Спасибо за ответ. Я установил этот плагин, но в этом примере я не знал, что мне нужно использовать для хранения файла. Код base64? Капля? Я новичок и не понимаю этого. - person Steph8; 21.03.2016
comment
Дополнительную информацию можно найти здесь - person Jur Clerkx; 21.03.2016
comment
Я читал, но не понял, что мне нужно, чтобы написать pdf. Теперь я знаю, как записать файл с помощью $ cordovaFile.writeFile (cordova.file.dataDirectory, file.txt, text, true), где первый - это каталог (я тестирую его и знаю, что мне нужно записать на externalstorage, чтобы прочтите файл после), новая секунда - это имя файла, а третья - его содержимое. Я скучаю по последнему пункту. Что мне нужно использовать для написания PDF? Base64? я не знаю это. - person Steph8; 21.03.2016

Пример кода для записи файла PDF на устройство с использованием файла Cordova и плагина для передачи файлов:

var fileTransfer = new FileTransfer();

    if (sessionStorage.platform.toLowerCase() == "android") {
        window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError);
    } else {
        // for iOS
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);
    }

    function onError(e) {
        navigator.notification.alert("Error : Downloading Failed");
    };

    function onFileSystemSuccess(fileSystem) {
        var entry = "";
        if (sessionStorage.platform.toLowerCase() == "android") {
            entry = fileSystem;
        } else {
            entry = fileSystem.root;
        }
        entry.getDirectory("Cordova", {
            create: true,
            exclusive: false
        }, onGetDirectorySuccess, onGetDirectoryFail);
    };

    function onGetDirectorySuccess(dir) {
        cdr = dir;
        dir.getFile(filename, {
            create: true,
            exclusive: false
        }, gotFileEntry, errorHandler);
    };

    function gotFileEntry(fileEntry) {
        // URL in which the pdf is available
        var documentUrl = "http://localhost:8080/testapp/test.pdf";
        var uri = encodeURI(documentUrl);
        fileTransfer.download(uri, cdr.nativeURL + "test.pdf",
            function(entry) {
                // Logic to open file using file opener plugin
            },
            function(error) {
                navigator.notification.alert(ajaxErrorMsg);
            },
            false
        );
    };
person Gandhi    schedule 21.03.2016
comment
это прекрасно, но моя проблема в том, что я знаю, как писать pdf, но я не понимаю, как писать pdf в этом примере. Я не могу найти, где хранится файл pdf в этом примере или где хранятся данные ... - person Steph8; 21.03.2016
comment
@ Steph8, извините, я не знаю, что вы следуете примеру и пробуете его. Я не очень разбираюсь в ionic framework. Но мое безумное предположение - попытаться предупредить "$ scope.pdfUrl", чтобы узнать, возвращает ли он вам какой-либо URL-адрес локального устройства, на котором находится файл. Но это всего лишь предположение. - person Gandhi; 21.03.2016
comment
к сожалению, $ scope.pdfUrl - это blob: http% 3A // 172.31.5.9% 3A8100 / 3c9dbb3d-ff85-4c5a-9d21-97f85e516226 не локальный URL :( - person Steph8; 21.03.2016
comment
в функции onGetDirectorySuccess () какое имя файла переменной? Может ли это быть любое имя или это было определено ранее? - person Jorrex; 23.06.2016
comment
@Jorrex это может быть любое имя с правильным расширением файла. Проверьте это для большей ясности - github.com/gandhirajan/Cordova_File_Operations, пожалуйста, проголосуйте, если это было полезно что это будет полезно и для других - person Gandhi; 23.06.2016
comment
Версия для iOS теперь работает на Android. Протестировано с Cordova 9 и Android 6. - person v.nivuahc; 05.08.2020