File tree Expand file tree Collapse file tree 2 files changed +41
-2
lines changed Expand file tree Collapse file tree 2 files changed +41
-2
lines changed Original file line number Diff line number Diff line change 11
11
'use strict' ;
12
12
13
13
const Blob = require ( './Blob' ) ;
14
+ const { toByteArray} = require ( 'base64-js' ) ;
14
15
const EventTarget = require ( 'event-target-shim' ) ;
15
16
16
17
import NativeFileReaderModule from './NativeFileReaderModule' ;
@@ -81,8 +82,35 @@ class FileReader extends (EventTarget(...READER_EVENTS): any) {
81
82
}
82
83
}
83
84
84
- readAsArrayBuffer ( ) {
85
- throw new Error ( 'FileReader.readAsArrayBuffer is not implemented' ) ;
85
+ readAsArrayBuffer ( blob : ?Blob ) {
86
+ this . _aborted = false ;
87
+
88
+ if ( blob == null ) {
89
+ throw new TypeError (
90
+ "Failed to execute 'readAsArrayBuffer' on 'FileReader': parameter 1 is not of type 'Blob'" ,
91
+ ) ;
92
+ }
93
+
94
+ NativeFileReaderModule . readAsDataURL ( blob . data ) . then (
95
+ ( text : string ) => {
96
+ if ( this . _aborted ) {
97
+ return ;
98
+ }
99
+
100
+ const base64 = text . split ( ',' ) [ 1 ] ;
101
+ const typedArray = toByteArray ( base64 ) ;
102
+
103
+ this . _result = typedArray . buffer ;
104
+ this . _setReadyState ( DONE ) ;
105
+ } ,
106
+ error => {
107
+ if ( this . _aborted ) {
108
+ return ;
109
+ }
110
+ this . _error = error ;
111
+ this . _setReadyState ( DONE ) ;
112
+ } ,
113
+ ) ;
86
114
}
87
115
88
116
readAsDataURL ( blob : ?Blob ) {
Original file line number Diff line number Diff line change @@ -38,4 +38,15 @@ describe('FileReader', function() {
38
38
} ) ;
39
39
expect ( e . target . result ) . toBe ( 'data:text/plain;base64,NDI=' ) ;
40
40
} ) ;
41
+
42
+ it ( 'should read blob as ArrayBuffer' , async ( ) => {
43
+ const e = await new Promise ( ( resolve , reject ) => {
44
+ const reader = new FileReader ( ) ;
45
+ reader . onload = resolve ;
46
+ reader . onerror = reject ;
47
+ reader . readAsArrayBuffer ( new Blob ( ) ) ;
48
+ } ) ;
49
+ /* eslint-disable-next-line no-undef */
50
+ expect ( new TextDecoder ( ) . decode ( e . target . result ) ) . toBe ( '42' ) ;
51
+ } ) ;
41
52
} ) ;
You can’t perform that action at this time.
0 commit comments