Как сохранить файл в проекте Cordova?

Я пытаюсь сохранить файл с помощью файла cordova-plugin-file. Сценарий работает, но я не могу найти файл на устройстве и cdv: ссылки не разрешаются.

export const SaveFile = function(fFile, sFileName) {
    return new Promise((resolve, reject) => {
        console.info("requestFilesystem", fFile);
        window.requestFileSystem(
            LocalFileSystem.PERSISTENT,
            fFile.size,
            function(fs) {
                console.info("got fs", fs);
                fs.root.getFile(
                    sFileName,
                    { create: true, exclusive: false },
                    function(fileEntry) {
                        console.info("got fileentry", fileEntry);
                        fileEntry.createWriter(function(fileWriter) {
                            fileWriter.onwriteend = (eEvent) => {
                                console.info(
                                    `${ fileWriter.localURL } saved`,
                                    `${ fFile.size }kb`
                                );
                                resolve(fileWriter);
                            };

                            fileWriter.onerror = (eError) => {
                                console.error('onErrorCreateWriter', JSON.stringify(eError));
                                reject(eError);
                            };

                            fileWriter.write(fFile);
                        });
                    },
                    (eError) => {
                        console.error('onErrorCreateFile', eError);
                        reject(eError);
                    }
                );
            },
            (eError) => {
                console.error('onErrorLoadFs', eError.message);
                reject(eErroreError.message);
            }
        );
    });
};

В логах получаю следующее:

SaveFile.js:3 requestFilesystem Blob {size: 1707639, type: "video/webm"}
SaveFile.js:8 got fs FileSystem {name: "persistent", root: DirectoryEntry}
SaveFile.js:13 got fileentry FileEntry {isFile: true, isDirectory: false, name: "1eb4d914-3d81-a313-7744-bea86b90f042.mp4", fullPath: "/1eb4d914-3d81-a313-7744-bea86b90f042.mp4", filesystem: FileSystem, …}
SaveFile.js:16 cdvfile://localhost/persistent/1eb4d914-3d81-a313-7744-bea86b90f042.mp4 saved 1707639kb

Значит, спасло? но я не вижу видео на fs, а cdvfile: ref в теге видео не работает.

Тег видео, пытающийся использовать файл в компоненте, просто:

<video controls = "" src = "cdvfile://localhost/persistent/1eb4d914-3d81-a313-7744-bea86b90f042.mp4"></video>

Вы компилируете свой код? я не думаю, что экспорт const SaveFile работает в ES5....

Eric 15.05.2019 14:18

(репост с комментариями) Я компилирую с помощью babel/webpack

confusedandconfusing 15.05.2019 21:38

@ Эрик, есть идеи, что могло случиться с файлом?

confusedandconfusing 17.05.2019 09:40

Покажите свой код, как вы загружаете файл после сохранения

Eric 17.05.2019 13:32

Я добавил его в сообщение, просто тег видео, строка URL-адреса исходит из обещания для редукции, а затем передается в другой компонент в качестве реквизита.

confusedandconfusing 21.05.2019 12:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
237
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов я нашел другие шаги, которые, кажется, работают. Мне нужно было запросить папку (и это должна была быть папка кеша), прежде чем я смог найти файлы на телефоне.

export const SaveFile = function(fFile, sFileName) {
    return new Promise((resolve, reject) => {
        window.resolveLocalFileSystemURL(
            cordova.file.externalCacheDirectory,
            function(directoryEntry) {
                directoryEntry.getFile(
                    sFileName,
                    { create: true },
                    function(fileEntry) {
                        fileEntry.createWriter(
                            function(fileWriter) {
                                fileWriter.onwriteend = (eEvent) => {
                                    resolve(fileWriter.localURL);
                                };

                                fileWriter.onerror = (eError) => {
                                    console.error('onErrorCreateWriter', JSON.stringify(eError));
                                    reject(eError);
                                };

                                fileWriter.write(fFile);
                            },
                            (eError) => {
                                console.error('onErrorCreateFile', eError);
                                reject(eError);
                            }
                        );
                    }
                );
            }
        );
    });
};

Другие вопросы по теме