2013-04-12 20 views
17

是否有在JavaScript 我目前使用下面的方法追加BLOB數據的函數:附加的Blob數據

var bb = new Blob(["Hello world, 2"], { type: "text/plain" }); 
bb = new Blob([bb, ",another data"], { type: "text/plain" }); 

而且BlobBuilder功能不可用在Chrome中。

+2

這是個好問題! –

+1

這基本上是你應該這樣做的,除非你能以某種方式將數據保存在一個數組中,然後做一個Blob構造。 –

+0

謝謝你的迴應傑克這就是我最終實現它的方式,我只是問是否有更聰明的解決方案,而恩克朗只是發佈了一個很好的解決方案。 –

回答

13

Blob s是「不可變的」,所以你不能在改變它之後改變它。構建一個將數據追加到現有blob的新Blob(如您在初始問題中所寫)是一個很好的解決方案。

如果每次追加零件時都不需要使用Blob,則可以追蹤零件數組。然後,您可以不斷追加到數組,然後在需要時最後構建Blob。

var MyBlobBuilder = function() { 
    this.parts = []; 
} 

MyBlobBuilder.prototype.append = function(part) { 
    this.parts.push(part); 
    this.blob = undefined; // Invalidate the blob 
}; 

MyBlobBuilder.prototype.getBlob = function() { 
    if (!this.blob) { 
    this.blob = new Blob(this.parts, { type: "text/plain" }); 
    } 
    return this.blob; 
}; 

var myBlobBuilder = new MyBlobBuilder(); 

myBlobBuilder.append("Hello world, 2"); 

// Other stuff ... 

myBlobBuilder.append(",another data"); 
var bb = myBlobBuilder.getBlob(); 
+3

簡單,乾淨,優雅。 +1 – Vinay