|
127 | 127 | var reader = new FileReader(); |
128 | 128 | var parts = file_input.value.split("\\"); |
129 | 129 | var filename = parts[parts.length-1]; |
130 | | - |
| 130 | + |
131 | 131 | reader.file = files[0]; |
132 | | - |
| 132 | + |
133 | 133 | reader.onloadend = function(event) { |
134 | | - callback(event.target.result, filename, options); |
| 134 | + var result = event.target.result; |
| 135 | + try { |
| 136 | + /* See if the data can be inflated. |
| 137 | + */ |
| 138 | + var unzipped = pako.inflate(result); |
| 139 | + result = unzipped.buffer; |
| 140 | + } catch(e) { |
| 141 | + /* pako probably didn't recognize this as gzip. |
| 142 | + */ |
| 143 | + } finally { |
| 144 | + /* At this point, we have a binary hunk of data that may |
| 145 | + * have been inflated. |
| 146 | + */ |
| 147 | + if (result_type !== 'arraybuffer') { |
| 148 | + /* The caller requested the data as a string, so we have |
| 149 | + * to perform an additional step to convert the |
| 150 | + * arraybuffer we have into the string the caller wants. |
| 151 | + */ |
| 152 | + if (typeof TextDecoder !== 'function') { |
| 153 | + /* Use the slightly slower blob-to-filereader conversion |
| 154 | + * to string. |
| 155 | + */ |
| 156 | + var blob = new Blob([result]); |
| 157 | + var rdr2 = new FileReader(); |
| 158 | + rdr2.onload = function(event) { |
| 159 | + callback(event.target.result, filename, options); |
| 160 | + }; |
| 161 | + rdr2.readAsText(blob); |
| 162 | + } |
| 163 | + else { |
| 164 | + /* Simpler but newer conversion using TextDecoder, this |
| 165 | + * might not work on some browsers. |
| 166 | + */ |
| 167 | + var dv = new DataView(result); |
| 168 | + var decoder = new TextDecoder(); |
| 169 | + result = decoder.decode(dv); |
| 170 | + callback(result, filename, options); |
| 171 | + } |
| 172 | + } |
| 173 | + else { |
| 174 | + /* The caller requested an arraybuffer, so we just pass it |
| 175 | + * back now. |
| 176 | + */ |
| 177 | + callback(result, filename, options); |
| 178 | + } |
| 179 | + } |
135 | 180 | }; |
136 | 181 |
|
137 | 182 | reader.onerror = function() { |
|
141 | 186 | throw new Error(error_message); |
142 | 187 | }; |
143 | 188 |
|
144 | | - if (result_type === "arraybuffer") { |
145 | | - reader.readAsArrayBuffer(files[0]); |
146 | | - } else { |
147 | | - reader.readAsText(files[0]); |
148 | | - } |
| 189 | + reader.readAsArrayBuffer(files[0]); |
149 | 190 | }, |
150 | 191 |
|
151 | 192 | /** |
|
0 commit comments