По умолчанию, стандартный пакет exporter не умеет сохранять экспортируемые файлы в локальную ФС устройства. Но с помощью cordova-plugin-file мы можем это исправить. Работоспособность проверял только под iOS.
/** * @class Overrides.exporter.File * @author Dmitry Kazarin <dikazarin@gmail.com> * * Сохраняет экспортируемый файл в файловой системе IOS * Использует функционал cordova-plugin-file * **/ Ext.define('Overrides.exporter.File', { override: 'Ext.exporter.File', requiresPopup: function() { // Мы не показываем popup (новое окно) для скачивания файла // Мы всегда используем blob return false; }, }, function(File) { File.saveBlobAs = Ext.Function.createInterceptor(File.saveBlobAs, function(textContent, fileName, charset, mimeType) { // Если мы запускаемся под cordova if (!!window.cordova) { let uint8 = new Uint8Array(textContent.length), len = uint8.length, blob, i; for (i = 0; i < len; i++) { uint8[i] = textContent.charCodeAt(i); } blob = new Blob([uint8], { type: mimeType || 'plain/text' }); // FileName должен содержать только ascii для совместимости c FS IOS // TODO объединить ругулярки ниже fileName = fileName.replace(/[^a-zA-Z0-9-. ]/g, '').replace(/ +/g, ' '); // Находим путь /Documents/ window.resolveLocalFileSystemURL(cordova.file.documentsDirectory, function (dirEntry) { // Откроем файл dirEntry.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) { fileEntry.createWriter(function (fileWriter) { fileWriter.onwriteend = function (e) { Ext.toast(`"${fileName}" saved in Documents folder successfully!`); }; fileWriter.onerror = function (e) { Ext.toast(`"${fileName}" saving failed: ${e.toString()}`); }; fileWriter.write(blob); }); }); }); return false; } else { // Пошли в оригинальную функцию return true; } }); });