filereader.js 851 B

1234567891011121314151617181920212223242526272829303132
  1. import { BaseSource } from './basesource.js';
  2. class FileReaderSource extends BaseSource {
  3. constructor(file) {
  4. super();
  5. this.file = file;
  6. }
  7. async fetchSlice(slice, signal) {
  8. return new Promise((resolve, reject) => {
  9. const blob = this.file.slice(slice.offset, slice.offset + slice.length);
  10. const reader = new FileReader();
  11. reader.onload = (event) => resolve(event.target.result);
  12. reader.onerror = reject;
  13. reader.onabort = reject;
  14. reader.readAsArrayBuffer(blob);
  15. if (signal) {
  16. signal.addEventListener('abort', () => reader.abort());
  17. }
  18. });
  19. }
  20. }
  21. /**
  22. * Create a new source from a given file/blob.
  23. * @param {Blob} file The file or blob to read from.
  24. * @returns The constructed source
  25. */
  26. export function makeFileReaderSource(file) {
  27. return new FileReaderSource(file);
  28. }