Я создаю приложение Cordova и используя API FileReader для чтения доступных файлов изображений, видео и аудио для создания zip-файла. Мой код, как показано ниже:Поврежденные файлы изображений после создания zip-файла с использованием API-интерфейсов Cordova FileReader
self.dataReader = function(uri) {
var deferred = $q.defer();
window.resolveLocalFileSystemURI(uri, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
deferred.resolve(evt.target.result);
};
reader.readAsDataURL(file);
});
}, function(error) {
if (error.code == FileError.NOT_FOUND_ERR) deferred.reject("Message : NOT_FOUND_ERR");
else if (error.code == FileError.SECURITY_ERR) deferred.reject("Message : SECURITY_ERR");
else if (error.code == FileError.ABORT_ERR) deferred.reject("Message : ABORT_ERR");
else if (error.code == FileError.NOT_READABLE_ERR) deferred.reject("Message : NOT_READABLE_ERR");
else if (error.code == FileError.ENCODING_ERR) deferred.reject("Message : ENCODING_ERR");
else if (error.code == FileError.NO_MODIFICATION_ALLOWED_ERR) deferred.reject("Message : NO_MODIFICATION_ALLOWED_ERR");
else if (error.code == FileError.INVALID_STATE_ERR) deferred.reject("Message : INVALID_STATE_ERR");
else if (error.code == FileError.SYNTAX_ERR) deferred.reject("Message : SYNTAX_ERR");
else if (error.code == FileError.INVALID_MODIFICATION_ERR) deferred.reject("Message : INVALID_MODIFICATION_ERR");
else if (error.code == FileError.QUOTA_EXCEEDED_ERR) deferred.reject("Message : QUOTA_EXCEEDED_ERR");
else if (error.code == FileError.PATH_EXISTS_ERR) aledeferred.reject("Message : PATH_EXISTS_ERR");
});
return deferred.promise;
}
self.packMedia = function(results, type, zip) {
var deferred = $q.defer();
var folder;
if (type == 1)
folder = zip.folder("images");
else if (type == 2)
folder = zip.folder("videos");
else
folder = zip.folder("audios");
var i = 0;
var sending = [];
var stp = $interval(function() {
if (i < results.length) {
if (sending[i] !== 's') {
sending[i] = 's';
self.dataReader(results[i].url).then(function(data) {
folder.file(results[i].name, data, {
base64: true
});
i++;
}, function(msg) {
i++;
});
}
} else {
$interval.cancel(stp);
stp = undefined;
sending = [];
deferred.resolve(zip);
}
}, 100);
return deferred.promise;
}
Этот код прекрасно создает почтовые пакеты без каких-либо проблем на включенных текстовые файлах, но все медиа-файлы Предстоят повреждены. Я могу открыть zip-файл, но когда я пытаюсь открыть, например, образ, он говорит, что он поврежден. Я не нашел подходящего решения. Кажется, проблема связана с базовым содержимым, поступающим из API. Проходил ли кто-нибудь такой вопрос?