feat(file): adds chunked blob writing (#529)

This prevents devices crashing when user picks a big file to write
This commit is contained in:
Sergii Stotskyi 2016-09-07 04:53:42 +03:00 committed by Ibrahim Hadeed
parent 26dead93ff
commit bbbd0d52e9

View File

@ -1119,6 +1119,10 @@ export class File {
* @private
*/
private static write(writer: FileWriter, gu: string | Blob): Promise<void> {
if (gu instanceof Blob) {
return this.writeFileInChunks(writer, gu);
}
return new Promise<void>((resolve, reject) => {
writer.onwriteend = (evt) => {
if (writer.error) {
@ -1130,4 +1134,32 @@ export class File {
writer.write(gu);
});
}
/**
* @private
*/
private static writeFileInChunks(writer: FileWriter, file: Blob) {
const BLOCK_SIZE = 1024 * 1024;
let writtenSize = 0;
function writeNextChunk() {
const size = Math.min(BLOCK_SIZE, file.size - writtenSize);
const chunk = file.slice(writtenSize, writtenSize + size);
writtenSize += size;
writer.write(chunk);
}
return new Promise((resolve, reject) => {
writer.onerror = reject;
writer.onwrite = () => {
if (writtenSize < file.size) {
writeNextChunk();
} else {
resolve();
}
};
writeNextChunk();
});
}
}