| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /**
- * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
- /**
- * @module upload/filereader
- */
- /* globals window */
- import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
- import mix from '@ckeditor/ckeditor5-utils/src/mix';
- /**
- * Wrapper over the native `FileReader`.
- */
- export default class FileReader {
- /**
- * Creates an instance of the FileReader.
- */
- constructor() {
- const reader = new window.FileReader();
- /**
- * Instance of native FileReader.
- *
- * @private
- * @member {FileReader} #_reader
- */
- this._reader = reader;
- this._data = undefined;
- /**
- * Number of bytes loaded.
- *
- * @readonly
- * @observable
- * @member {Number} #loaded
- */
- this.set( 'loaded', 0 );
- reader.onprogress = evt => {
- this.loaded = evt.loaded;
- };
- }
- /**
- * Returns error that occurred during file reading.
- *
- * @returns {Error}
- */
- get error() {
- return this._reader.error;
- }
- /**
- * Holds the data of an already loaded file. The file must be first loaded
- * by using {@link module:upload/filereader~FileReader#read `read()`}.
- *
- * @type {File|undefined}
- */
- get data() {
- return this._data;
- }
- /**
- * Reads the provided file.
- *
- * @param {File} file Native File object.
- * @returns {Promise.<String>} Returns a promise that will be resolved with file's content.
- * The promise will be rejected in case of an error or when the reading process is aborted.
- */
- read( file ) {
- const reader = this._reader;
- this.total = file.size;
- return new Promise( ( resolve, reject ) => {
- reader.onload = () => {
- const result = reader.result;
- this._data = result;
- resolve( result );
- };
- reader.onerror = () => {
- reject( 'error' );
- };
- reader.onabort = () => {
- reject( 'aborted' );
- };
- this._reader.readAsDataURL( file );
- } );
- }
- /**
- * Aborts file reader.
- */
- abort() {
- this._reader.abort();
- }
- }
- mix( FileReader, ObservableMixin );
|