С помощью этого кода вы можете загружать большие изображения, поскольку они записаны блоками по 1 МБ, вместо того, чтобы делать всю запись одновременно. Без записи 1 МБ я не смог написать файлы размером более 4 МБ, но с этим я без проблем протестировал файлы размером до 40 МБ.

va "закатывает" (собирается осудить) cordovan-plugin-file, см.их блог.

Сообщество разработчиков Cordova больше не будет работать над плагином для передачи файлов. Вы можете продолжать использовать плагин для передачи файлов, если хотите - он должен работать как обычно в обозримом будущем. Мы настоятельно рекомендуем пользователям Cordova перейти на использование стандартного способа отправки и получения двоичных данных.

Они поощряют переход к использованию запросов XHR2 (запросы XHR, гдеresponseType установлен вкапля или жеArrayBuffer.

В сообщении блога приведен пример того, как двоичные данные могут быть получены с помощью XHR2:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
console.log('file system open: ' + fs.name);
fs.root.getFile('bot.png', { create: true, exclusive: false }, function (fileEntry) {
    console.log('fileEntry is file? ' + fileEntry.isFile.toString());
    var oReq = new XMLHttpRequest();
    // Make sure you add the domain name to the Content-Security-Policy <meta> element.
    oReq.open("GET", "http://cordova.apache.org/static/img/cordova_bot.png", true);
    // Define how you want the XHR data to come back
    oReq.responseType = "blob";
    oReq.onload = function (oEvent) {
        var blob = oReq.response; // Note: not oReq.responseText
        if (blob) {
            // Create a URL based on the blob, and set an <img> tag's src to it.
            var url = window.URL.createObjectURL(blob);
            document.getElementById('bot-img').src = url;
            // Or read the data with a FileReader
            var reader = new FileReader();
            reader.addEventListener("loadend", function() {
               // reader.result contains the contents of blob as text
            });
            reader.readAsText(blob);
        } else console.error('we didnt get an XHR response!');
    };
    oReq.send(null);
}, function (err) { console.error('error getting file! ' + err); });}, function (err) { console.error('error getting persistent fs! ' + err); });


У меня есть некоторые проблемы с пониманием кода выше и намерением Cordova отказаться от плагина передачи файлов в пользу прямой загрузки BLOB-объектов через Ajax.

Я вижу это правильно:fs.root.getFile создает файл. Обработчик успеха загрузки (oReq.onload) не пытается записать извлеченный большой двоичный объект в созданный файл. Нет четкой причины, по которой создается fileEntry. Если бы я хотел сохранить извлеченный большой двоичный объект в созданный FileEntry, вoReq.onload Я мог бы продолжать использовать FileWriter, но только для небольших (я читаю до 5 МБ) файлов (поскольку BLOB-объект обрабатывается в памяти). В блоге рассказывается о том, как вообще можно получить блоб, а не о том, как его можно загрузить в файловую систему. Если я захочу скачать файлы большего размера (например, пару сотен МБ), то отойти от cordova-plugin-filetransfer сейчас не вариант.

Ответы на вопрос(1)

Ваш ответ на вопрос