user1705545 user1705545 - 6 months ago 51
TypeScript Question

Using PhoneGap FileWriter.write for "big" files

I have a problem in my PhoneGap app. I would like to write a file of 15 MB. If I try the OS pulls more and more memory and the app crashes without message. I can reproduce this on android and blackberry tablets. Is there a way to implement the writing more efficient?

best regards

(fw: any) => {
fw.onwriteend = (e) => {
fw.onwriteend = (e) => {

// write BOM (dead for now)
(error: any) => {
alert("FileWriter Failed: " + error.code);

It's TypeScript, I hope JS developers won't struggle with this ;)


I found the answer.

Crash reason: PhoneGap FileWrite.write cannot handle too big buffer, do not know exact size, I think this issue is due to PG transfer data to iOS through URL Scheme, somehow it crash when "URL" is too long.

How to fix it: write small block every time, code below:

function gotFileWriter(writer) {
  function writeFinish() {
    // ... your done code here...

  var written = 0;
  var BLOCK_SIZE = 1*1024*1024; // write 1M every time of write
  function writeNext(cbFinish) {
    var sz = Math.min(BLOCK_SIZE, data.byteLength - written);
    var sub = data.slice(written, written+sz);
    written += sz;
    writer.onwrite = function(evt) {
      if (written < data.byteLength)

UPDATE Aug 12,2014:

In my practice, the performance of saving file through Cordova FileSystem is not good, especially for large file(>5M) on phone, it takes a few seconds. If you are downloading file from server to local disk, you may want a "efficient and direct" way, try cordova-plugin-file-transfer plugin.