diff --git a/src/plugins/file.ts b/src/plugins/file.ts index 54874bcbe..fb0fa9358 100644 --- a/src/plugins/file.ts +++ b/src/plugins/file.ts @@ -462,7 +462,57 @@ export class File { // static writeExistingFile(path: string, fileName: string, text: string): Promise { return } - // static readAsText(path: string, file: string): Promise { return } + /** + * Read a file as string. + * + * @param {string} path Base FileSystem. Please refer to the iOS and Android filesystems above + * @param {string} fileName Name of file to move + * @return Returns a Promise that resolves or rejects with an error. + */ + static readAsText(path: string, fileName: string): Promise { + let resolveFn, rejectFn; + let promise = new Promise((resolve, reject) => {resolveFn = resolve; rejectFn = reject; }); + + if ((/^\//.test(fileName))) { + rejectFn('file-name cannot start with \/'); + } + + try { + window.resolveLocalFileSystemURL(path, function (fileSystem) { + fileSystem.getFile(fileName, {create: false}, function (fileEntry) { + fileEntry.file(function (file) { + var reader = new FileReader(); + + reader.onloadend = function(e) { + if (this.result !== undefined && this.result !== null) { + resolveFn(this.result); + } else if (this.error !== undefined && this.error !== null) { + rejectFn(this.error); + } else { + rejectFn({code: null, message: 'READER_ONLOADEND_ERR'}); + } + } + + reader.readAsText(file); + }, function (error) { + error.message = File.cordovaFileError[error.code]; + rejectFn(error); + }); + }, function (err) { + err.message = File.cordovaFileError[err.code]; + rejectFn(err); + }); + }, function (er) { + er.message = File.cordovaFileError[er.code]; + rejectFn(er); + }); + } catch (e) { + e.message = File.cordovaFileError[e.code]; + rejectFn(e); + } + + return promise; + } // static readAsDataURL(path: string, file: string): Promise { return }