8
0

filereader.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /**
  6. * @module upload/filereader
  7. */
  8. /* globals window */
  9. import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
  10. import mix from '@ckeditor/ckeditor5-utils/src/mix';
  11. /**
  12. * FileReader class - wrapper over native FileReader.
  13. */
  14. export default class FileReader {
  15. /**
  16. * Creates an instance of the FileReader.
  17. */
  18. constructor() {
  19. const reader = new window.FileReader();
  20. /**
  21. * Instance of native FileReader.
  22. *
  23. * @private
  24. * @member {FileReader} #_reader
  25. */
  26. this._reader = reader;
  27. /**
  28. * Number of bytes loaded.
  29. *
  30. * @readonly
  31. * @observable
  32. * @member {Number} #loaded
  33. */
  34. this.set( 'loaded', 0 );
  35. reader.onprogress = evt => {
  36. this.loaded = evt.loaded;
  37. };
  38. }
  39. /**
  40. * Returns error that occurred during file reading.
  41. *
  42. * @returns {Error}
  43. */
  44. get error() {
  45. return this._reader.error;
  46. }
  47. /**
  48. * Reads provided file.
  49. *
  50. * @param {File} file Native File object.
  51. * @returns {Promise} Returns a promise that will resolve with file's contents. Promise can be rejected in case of
  52. * error or when reading process is aborted.
  53. */
  54. read( file ) {
  55. const reader = this._reader;
  56. this.total = file.size;
  57. return new Promise( ( resolve, reject ) => {
  58. reader.onload = () => {
  59. resolve( reader.result );
  60. };
  61. reader.onerror = () => {
  62. reject( 'error' );
  63. };
  64. reader.onabort = () => {
  65. reject( 'aborted' );
  66. };
  67. this._reader.readAsDataURL( file );
  68. } );
  69. }
  70. /**
  71. * Aborts file reader.
  72. */
  73. abort() {
  74. this._reader.abort();
  75. }
  76. }
  77. mix( FileReader, ObservableMixin );