Córdoba - Leer imagen grande daña la imagen

Estoy usando el selector de imágenes (cordova-imagePicker) para obtener imágenes de la galería y subirlas a un servidor.

Estoy usando Cordova 6.1.1 con la plataforma Android 5.1.1 y los siguientes complementos:

cordova-plugin-camera 2.2.0 "Camera"
cordova-plugin-compat 1.0.0 "Compat"
cordova-plugin-device 1.0.1 "Device"
cordova-plugin-file 4.2.0 "File"
cordova-plugin-imagepicker 1.1.0 "ImagePicker"
cordova-plugin-inappbrowser 1.4.0 "InAppBrowser"
cordova-plugin-media 2.3.0 "Media"

Como devolución de llamada al complemento, estoy convirtiendo la ruta que llego a un archivo usando el siguiente código. Tenga en cuenta que yo usoresolveFile porque este código también se está ejecutando en el escritorio, en cuyo caso, la entrada ya es un objeto File.

var resolveFile = function(entry) {
    if (typeof(entry) === "string") {
        var deferred = $q.defer();
        // first convert to local file system URL
        window.resolveLocalFileSystemURL(entry, function(fileEntry) {
            // now read/convert the file to file object.
            fileEntry.file(function(file) {
                console.log("File converted to file entry");
                deferred.resolve(file);
            }, function(err) {
                console.log("Failed to convert to file entry", err);
                deferred.reject(err);
            });
        }, function(err) {
            console.log("Failed to resolve to file URL", err);
            deferred.reject(err);
        });

        return deferred.promise;
    } else {
        return $q.when(entry);
    }
};

Esto, a su vez, se usa para leer la imagen y pasarla a una función que la carga en el servidor ($files es lo que obtengo del complemento o de la entrada en el caso del escritorio / navegador):

var upload = function () {
    if (!$files[currentFile]) {
        onAllFinished();
        return;
    }
    file = $files[currentFile];
    beforeLoad(file);
    fileReader = new FileReader();
    fileReader.onload = onload;
    fileReader.onprogress = progress;
    resolveFile(file).then(function(actualFile) {
        fileReader.readAsDataURL(actualFile);
    });
    currentFile++;
};

En lo anterior, onload corta los datos de la imagen (después de 'base64' en cadena) y los envía al código de carga que espera una cadena base64 y carga los datos al servidor mediante una simple llamada AJAX:

var uploadPhoto = function(url, photo, callback, error)
    $http.post(url, {
        photo: photo,
    })
    .success(callback)
    .error(function (data, status, headers, config) {
        if (error)
            error(data, status, headers, config);
    });

La última función también funciona con el complemento de la cámara.plugin de cámara utilizandoDATA_URI target (lo sé, no se recomienda) que también devuelva una cadena base64 (para que pueda reutilizar el código).

Me parece que hay algo mal con la salida del lector de archivos (supongo). Lo que (creo) sugiere es que las imágenes pequeñas (10s kb) se cargan bien, así como la cadena base64 ya preparada del complemento de la cámara, pero las imágenes más grandes (pocos MB) que pasan por el lector de archivos (en Android, en el escritorio está bien) ) se cargan corruptos (ver más abajo).

¿Alguien se ha encontrado con tales problemas? ¿Alguien puede sugerir una solución (aparte de cambiar el código para usar el complemento FileTransfer)?

La imagen original:

La imagen cargada (corrupta). Tenga en cuenta que algunos de ellos se leen / cargan bien:

Respuestas a la pregunta(1)

Su respuesta a la pregunta