| 782 | } |
| 783 | |
| 784 | var writeFile_ = function(fileEntry) { |
| 785 | fileEntry.createWriter(function(fileWriter) { |
| 786 | |
| 787 | fileWriter.onerror = opt_errorHandler; |
| 788 | |
| 789 | if (dataObj.append) { |
| 790 | fileWriter.onwriteend = function(e) { |
| 791 | if (opt_successCallback) opt_successCallback(fileEntry, this); |
| 792 | }; |
| 793 | |
| 794 | fileWriter.seek(fileWriter.length); // Start write position at EOF. |
| 795 | } else { |
| 796 | var truncated = false; |
| 797 | fileWriter.onwriteend = function(e) { |
| 798 | // Truncate file to newly written file size. |
| 799 | if (!truncated) { |
| 800 | truncated = true; |
| 801 | this.truncate(this.position); |
| 802 | return; |
| 803 | } |
| 804 | if (opt_successCallback) opt_successCallback(fileEntry, this); |
| 805 | }; |
| 806 | } |
| 807 | |
| 808 | // Blob() takes ArrayBufferView, not ArrayBuffer. |
| 809 | if (dataObj.data.__proto__ == ArrayBuffer.prototype) { |
| 810 | dataObj.data = new Uint8Array(dataObj.data); |
| 811 | } |
| 812 | var blob = new Blob([dataObj.data], |
| 813 | dataObj.type ? {type: dataObj.type} : {}); |
| 814 | |
| 815 | fileWriter.write(blob); |
| 816 | |
| 817 | }, opt_errorHandler); |
| 818 | }; |
| 819 | |
| 820 | if (entryOrPath.isFile) { |
| 821 | writeFile_(entryOrPath); |